??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品亚洲精品国产欧美kt∨,色综合天天天天做夜夜夜夜做,国产精品免费一区二区三区观看http://www.aygfsteel.com/army666/archive/2006/02/16/30943.htmlParmyParmyThu, 16 Feb 2006 03:12:00 GMThttp://www.aygfsteel.com/army666/archive/2006/02/16/30943.htmlhttp://www.aygfsteel.com/army666/comments/30943.htmlhttp://www.aygfsteel.com/army666/archive/2006/02/16/30943.html#Feedback0http://www.aygfsteel.com/army666/comments/commentRss/30943.htmlhttp://www.aygfsteel.com/army666/services/trackbacks/30943.html~写使用q些接口?Java 代码

通过在您的应用程序中使用 XMLBean 接口Q可以编写用新cd的代码,以便Z?Schema ?XML q行处理。下面的CZ提取有兌购单 XML 中的每个订购商品的信息,q计商品的数量Q然后计其hd。请特别注意Z Schema 生成的类型以及作?org.openuri.easypo 包的一部分而导入的cd的用情c?/P>

printItems Ҏ接收包含订购?XML 文g?File 对象?/P>

package docs.xmlbeans;

import java.io.File;
import com.bea.xml.*;
import org.openuri.easypo.PurchaseOrderDocument;
import org.openuri.easypo.PurchaseOrder;
import org.openuri.easypo.LineItem;

public class POHandler 
{
    public static void printItems(File po) throws Exception 
    {
        /*
         * 所?XMLBean Schema cd都提供嵌套的 Factory c,您可以用它
         * ?XML l定到该cdQ或者创cd的新实例?
         * h意,像该cd一L“Document”类型是 XMLBean
         * 构造,用于表示全局元素。它为您提供了一U?
         * 获取和设|整个元素的内容的方法?
         *
         * 此外Q只有在所解析?XML 遵守
         * Schema 的情况下Qparse Ҏ才会成功?
         */
        PurchaseOrderDocument poDoc =
            PurchaseOrderDocument.Factory.parse(po);

        /*
         * PurchaseOrder cd表示 purchase-order 元素?
         * 复杂cd?
         */
        PurchaseOrder po = poDoc.getPurchaseOrder();

        /*
         * 当某个元素可能作为子元素出现多次Ӟ
         * Schema ~译器将生成引用该元?
         * 的多个实例的Ҏ。line-item 元素
         * ?maxOccurs Ҏ值指定ؓ“unbounded”,q意味着
         * 它可以根据需要在一个实例中出现多次?
         * 因此存在 getLineItemArray ?setLineItemArray {方法?
         */
        LineItem[] lineitems = po.getLineItemArray();
        System.out.println("Purchase order has " + lineitems.length + " line items.");

double totalAmount = 0.0;
        int numberOfItems = 0;

        /*
         * 循环遍历 line-item 元素Q方法是使用所生成的存取程?
         * 获取子元素的|?description、quantity 以及
         * price?
         */
        for (int j = 0; j < lineitems.length; j++) 
        {
            System.out.println(" Line item:" + j);
            System.out.println(
                "   Description:" + lineitems[j].getDescription());
            System.out.println("   Quantity:" + lineitems[j].getQuantity());
            System.out.println("   Price:" + lineitems[j].getPrice());
            numberOfItems += lineitems[j].getQuantity();
            totalAmount += lineitems[j].getPrice() * lineitems[j].getQuantity();
        }
        System.out.println("Total items:" + numberOfItems);
        System.out.println("Total amount:" + totalAmount);
    }
}

h意,Z Schema 所生成的类型反映了 XML 中的内容Q?/P>

  • PurchaseOrderDocumentQ表C全局根元素?
  • getPurchaseOrder ҎQ返回包含子元素Q其中包?line-itemQ的 PurchaseOrderDocument.PurchaseOrder cd?SPAN class=langinline>getLineItemArray ҎQ返回包?line-item 元素?LineItem 数组?
  • 其他ҎQ如 getQuantity?SPAN class=langinline>getPrice {等Q是Ҏ Schema 的描q自然得出的Q其作用是返?line-item 元素的相应子元素?
  • 包含q些cd的包的名U是?Schema 的目标名U空间派生得到的?

所生成的类型名U的大小写和标点W号遵从 Java U定。此外,当该CZ解析文g中的 XML Ӟ其他 parse Ҏ支持 Java InputStream 对象?SPAN class=langinline>Reader 对象{等?/P>

前面?Java 代码在控制C打印下列内容Q?/P>

Purchase order has 3 line items.
 Line item 0
   Description:Burnham's Celestial Handbook, Vol 1
   Quantity: 2
   Price: 21.79
 Line item 1
   Description:Burnham's Celestial Handbook, Vol 2
   Quantity: 2
   Price: 19.89
Total items: 4
Total amount: 41.68

Z Schema 创徏新的 XML 实例

您已l看?XMLBean 提供一?"factory" c,您可以用该cL创徏新的实例。下面的CZ创徏新的 purchase-order 元素Qƈd customer 子元素。然后它会插?name ?address 子元素,从而创建元素,q过仅调用一ơ它们的 set Ҏ来设|它们的倹{?/P>

public PurchaseOrderDocument createPO()
{
    PurchaseOrderDocument newPODoc = PurchaseOrderDocument.Factory.newInstance();
    PurchaseOrder newPO = newPODoc.addNewPurchaseOrder();
    Customer newCustomer = newPO.addNewCustomer();
    newCustomer.setName("Doris Kravitz");
    newCustomer.setAddress("Bellflower, CA");
    return newPODoc;
}

下面是生成的 XML。请注意QXMLBean 通过使用 "ns1"Q或 "namespace 1"Q前~QƈZ Schema 来分配正的名称I间。在实际工作中,前缀本nq不是真的很重要Q它只是用来定义名称I间的名U空?URI (http://openuri.org/easypo)。前~仅仅是表C它的一个标记?/P>

<ns1:purchase-order xmlns:ns1="http://openuri.org/easypo">
    <ns1:customer>
        <ns1:name>Doris Kravitz</ns1:name>
        <ns1:address>Bellflower, CA</ns1:address>
    </ns1:customer>
</ns1:purchase-order>

h意,所有类型(包括Z Schema 生成的类型)都是?XmlObject 的承,因此都提供了 Factory cR有关适合使用 XmlObject 的类型系l的概述Q请参阅 XMLBean 对内|?Schema cd的支?/FONT>。有兛_考信息,请参?XmlObject Interface?/P>

XMLBean 层次

上面的示例中使用的生成类型实际上?XMLBean cd的层ơ的一部分。这U层ơ是 XMLBean 用来直观展现 Schema 视图的一U方法。层ơ的剙?XmlObjectQ即 XMLBean cd的基接口。在该别的下面Q有两个主要的类型类别:生成cdQ表C用h生的 Schema cdQ和包括cdQ表C内|?Schema cdQ?/P>本主题已介绍了生成类型。有兌l信息,请参?A >从用h生的 Schema cd生成?Java cd?

内置cd支持

除了Z指定?Schema 所生成的类型以外,XMLBean q提供了 46 U特别的 Java cdQ这些类型是?XML Schema 规范所定义?46 U内|类型的镜像。例如,Schema 定义?xs:string?SPAN class=langinline>xs:decimal ?xs:intQ?XMLBean 提供?XmlString?SPAN class=langinline>XmlDecimal ?XmlInt。其中的每个cd也是l承?XmlObjectQ该cd与内|?Schema cd xs:anyType 对应?/P>

通过 XMLBeanQ您可以将 XML 数据作ؓq些内置cdq行处理。如果您?Schema 包括一个类型ؓ xs:int 的元素,XMLBean 提供一个可以返?XmlInt 的生成方法。此外,像您在前面的示例中所看到的,对于大多数类型来_q将有一个返回纯 Java cdQ如 intQ的Ҏ。下面的两行代码q回 quantity 元素的|但将其作为其他类型返回?/P>

// q回以“x”开头的单类型的Ҏ?
XmlInt xmlQuantity = lineitems[j].xgetQuantity();
// q回U?Java cd的方法?
int javaQuantity = lineitems[j].getQuantity();

在某U意义上Q这两种 get Ҏ均导航至 quantity 元素Q?SPAN class=langinline>getQuantity Ҏ更深入一步,在返回元素g前,其转换为最适合的纯 Java cd。(XMLBean qؓ您提供了一U在使用 XML 的同时对它进行验证的Ҏ。)

如果您对 XML Schema 有所了解Q那么您会觉?XMLBean cd看v来非常直观。如果您?XML Schema 知之甚少Q可以用您自己?Schema 以及Z它们?XML 实例来对 XMLBean q行试验Q以了解详细的信息?/P>

有关Z Schema 生成的类型的Ҏ的详l信息,请参??Schema 生成的类型的Ҏ。有?XMLBean 如何表示内置 Schema cd的详l信息,请参?XMLBean 对内|?Schema cd的支?/FONT>?/P>

使用 XQuery 表达?/H2>

使用 XMLBeanQ可以通过 XQuery 查询 XML 中特定的数据块。XQuery 有时也称为“用?XML ?SQL”,因ؓ它提供了一U直接从 XML 文档讉K数据的机Ӟq与 SQL 所提供的、访问传l数据库数据的机制十分类伹{?/P>

XQuery 的一些语法是?XPath 借鉴来的Q后者是一U用于在 XML 中指定嵌套数据的语法。下面的CZq回 price 子元素的值小于或{于 20.00 的所?line-item 元素Q?/P>

PurchaseOrderDocument doc = PurchaseOrderDocument.Factory.parse(po);

/*
 * XQuery 表达式是׃面两个字W串l成的。ؓ方便赯Q?
 * 在这里分别对它们q行声明。第一个字W串声明
 * 在查询表辑ּ中用的名称I间前缀Q第二个字符?
 * 声明表达式本w?
 */
String nsText = "declare namespace po = 'http://openuri.org/easypo'";
String pathText = "$this/po:purchase-order/po:line-item[po:price <= 20.00]";
String queryText = nsText + pathText;

XmlCursor itemCursor = doc.newCursor().execQuery(queryText);
System.out.println(itemCursor.xmlText());

上述代码在文档的开头创Z个新的光标。从那里Q它使用 XmlCursor 接口?execQuery Ҏ执行查询表达式。在本例中,该方法的参数?XQuery 表达式,该表辑ּ仅仅指出“从我当前的位置Q在 purchase-order 元素中导航,q检索值小于或{于 20.00 的那?line-item 元素”?SPAN class=langinline>$this 变量意味着“当前的位置”?/P>

有关 XQuery 的详l信息,请参?W3C |站中的 XQuery 1.0:An XML Query Language?/P>

使用 XML 光标

在前面的CZ中,您可能已l注意到 XmlCursor 接口。除了提供一U执?XQuery 表达式的Ҏ外,XML 光标q提供一U用于操作数据的l粒度模型。XML 光标 API ?DOM 的对?API cMQ它只是一U指向特定数据块的方式。因此,像光标有助于在字处理文档中D一PXML 光标则定义了 XML 中的一个位|,您可以在该位|对选定?XML 执行操作?/P>

当没有可用的 Schema Ӟ光标是一U在 XML 文档中移动的理想Ҏ。一旦光标到达了您需要的位置Q您可以用它执行各种操作。例如,可以讄和获取倹{插入和删除 XML 的片Dc将 XML 的片D复制到文档的其他部分,以及?XML 文档q行其他l粒度更攏V?/P>

下面的示例?XML 光标D?customer 元素?name 子元素?/P>

PurchaseOrderDocument doc = 
    PurchaseOrderDocument.Factory.parse(po);

XmlCursor cursor = doc.newCursor();
cursor.toFirstContentToken();
cursor.toFirstChildElement();
cursor.toFirstChildElement();
System.out.println(cursor.getText());

cursor.dispose();

上述代码执行了哪些操作呢Q与前面的示例一P代码加蝲 File 对象中的 XML。加载文档之后,代码在它的v始位|处创徏一个光标。移动光标几ơ,使它到达嵌套?name 元素。一旦光标到达该元素QgetText Ҏ便会索该元素的倹{?/P>



Parmy 2006-02-16 11:12 发表评论
]]>
XML 深入了解http://www.aygfsteel.com/army666/archive/2006/02/16/30942.htmlParmyParmyThu, 16 Feb 2006 03:11:00 GMThttp://www.aygfsteel.com/army666/archive/2006/02/16/30942.htmlhttp://www.aygfsteel.com/army666/comments/30942.htmlhttp://www.aygfsteel.com/army666/archive/2006/02/16/30942.html#Feedback0http://www.aygfsteel.com/army666/comments/commentRss/30942.htmlhttp://www.aygfsteel.com/army666/services/trackbacks/30942.html使用 Schema 讉K XML

要大致了?XMLBean 的各U功能,L一个?XML 处理订购单的CZ。订购单 XML 包含两方Q如两个公司Q交换的数据。两斚w要能够依赖一致的消息形态,q过 Schema 来指定共同点?/P>

下面是订购单 XML 实例的可能外观?/P>

<po:purchase-order xmlns:po="http://openuri.org/easypo">
    <po:customer>
        <po:name>Gladys Kravitz</po:name>
        <po:address>Anytown, PA</po:address>
    </po:customer>
    <po:date>2003-01-07T14:16:00-05:00</po:date>
    <po:line-item>
        <po:description>Burnham's Celestial Handbook, Vol 1</po:description>
        <po:per-unit-ounces>5</po:per-unit-ounces>
        <po:price>21.79</po:price>
        <po:quantity>2</po:quantity>
    </po:line-item>
    <po:line-item>
        <po:description>Burnham's Celestial Handbook, Vol 2</po:description>
        <po:per-unit-ounces>5</po:per-unit-ounces>
        <po:price>19.89</po:price>
        <po:quantity>2</po:quantity>
    </po:line-item>
<po:shipper>
        <po:name>ZipShip</po:name>
        <po:per-ounce-rate>0.74</po:per-ounce-rate>
    </po:shipper>
</po:purchase-order>

?XML 包括一个根元素 purchase-orderQ该元素h三种cd的子元素Q?SPAN class=langinline>customer?SPAN class=langinline>date?SPAN class=langinline>line-item ?shipper。此 XML 的一U直观的、基于对象的视图提供了一个表C?purchase-order 元素的对象。该对象拥有一些方法,可以用于获取日期Q以?customer?SPAN class=langinline>line-item ?shipper 元素的从属对象。最后的三个元素每个也都有其自己的方法,可以用这些方法来获取其内部的数据?/P>

查看 Schema

下面?XML 是前面的订购?XML ?Schema。它定义?XML 的“结构”,卛_有哪些元素、它们的出现序、每一个元素都有哪些子元素{等?/P>

<xs:schema targetNamespace="http://openuri.org/easypo"
    xmlns:po="http://openuri.org/easypo"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified">
	
<xs:element name="purchase-order">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="customer" type="po:customer"/>
                <xs:element name="date" type="xs:dateTime"/>
                <xs:element name="line-item" type="po:line-item" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="shipper" type="po:shipper" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="customer">
        <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="address" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="line-item">
        <xs:sequence>
            <xs:element name="description" type="xs:string"/>
            <xs:element name="per-unit-ounces" type="xs:decimal"/>
            <xs:element name="price" type="xs:double"/>
            <xs:element name="quantity" type="xs:int"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="shipper">
        <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="per-ounce-rate" type="xs:decimal"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

?Schema 通过定义下列内容来描q订购单 XML 实例Q?/P>

  • 三种复杂cd的定义:customer、line-item ?shipper。它们是订购单元素的子元素所使用的类型。在 Schema 中,复杂cd用于定义可以h子元素和Ҏ的元素。嵌套在复杂cd中的序元素则列出其子元素?

    它们也是“全局”类型。它们之所以是全局cdQ是因ؓ它们位于 Schema 的顶U,也就是说Q紧?schema 根元素的下面。这意味着可以?Schema 中的其他M位置引用q些cd?/P>

  • 复杂cd中简单类型的使用。name、address ?description 元素Q以及其他元素)被当作简单类型。它们恰好也是“内|”类型。内|类型(本例中是h“xs”前~的类型)?Schema 规范的一部分。(规范定义?46 个内|类型。)
  • 名ؓ purchase-order 的全局元素。该元素定义中包含嵌套的复杂cd定义Q以指定 purchase-order 元素的子元素。请注意Q复杂类型中包含对该 Schema 中定义的其他复杂cd的引用?

也就是说QSchema 定义了子元素的类型,q将它们的位|描qCؓ根元?purchase-order 的从属元素?/P>

使用 XMLBean ~译器编译类D Schema ?XSD 文gӞ生成一?JAR 文gQ该文g会包含从?Schema 生成的接口?/P>



Parmy 2006-02-16 11:11 发表评论
]]>
XMLBean 概念http://www.aygfsteel.com/army666/archive/2006/02/16/30941.htmlParmyParmyThu, 16 Feb 2006 03:10:00 GMThttp://www.aygfsteel.com/army666/archive/2006/02/16/30941.htmlhttp://www.aygfsteel.com/army666/comments/30941.htmlhttp://www.aygfsteel.com/army666/archive/2006/02/16/30941.html#Feedback0http://www.aygfsteel.com/army666/comments/commentRss/30941.htmlhttp://www.aygfsteel.com/army666/services/trackbacks/30941.html

XMLBean 提供了一U处?XML 的直观方法,q种Ҏ使您可以更轻村֜讉K和操?Java 中的 XML 数据和文档?/P>

XMLBean 处理 XML 的方法具有以下特征:

  • 它提供了我们熟悉的、基?Java 对象?XML 数据视图Qƈ且让您仍然能够访问原始的、纯 XML l构?
  • XMLBean 不会?XML 作ؓ文档的完整性丢失。面?XML ?API 通常?XML 拆开Q以便绑定到它的各个部分。?XMLBeanQ可以将整个 XML 实例文档作ؓ一个整体加以处理。XML 数据?XML 的Ş式存储在内存中。这意味着保留了文档的序Q以及原始的元素内容和空根{?
  • 使用通过 Schema 所生成的类型,可以通过?JavaBean cM的存取程序来讉K XML 实例Q这个过E需要利?get ?set Ҏ?
  • 从设计一开始就要考虑?XML SchemaQ?XMLBean 支持所?XML Schema 定义?
  • 讉K XML 的速度很快?

XMLBean 的vҎ XML Schema。SchemaQ包含在 XSD 文g中)?XML 文档Q它定义了其?XML 文档必须遵守的一l规则。XML Schema 规范提供了丰富的数据模型Q您可以表辑֤杂的l构QƈҎ据加以约束。例如,XML Schema 可以Ҏ档中数据的顺序进行控Ӟ或对特定的值加以约束(例如Q生日必d?1900Q。遗憄是,?Java 中,通常要编写自定义代码才能强制实施此类规则。XMLBean 遵守 Schema U束?/P>

注意Q?/STRONG> XML Schema 用于?XML 文档定义规则Q?XML“实例”则是遵守该 Schema ?XML 文档?/P>

可以通过~译 Schema (XSD) 文gQ来生成一l用来镜像该 Schema ?Java 接口。用这些类型,可以处理遵守?Schema ?XML 实例文档。可以将 XML 实例文档l定到这些类型;通过 Java 接口所q行的更改会改变基本?XML 表示?/P>

以前在处?XML 时可以选择使用 XML ~程接口Q如 DOM ?SAXQ,?XML ~组/l定工具Q如 JAXBQ。由于它~Z很强的面?Schema 的类型功能,因此在面?DOM 的模型中D旉度更加~慢Qƈ需要了解完整的对象模型。JAXB 支持 XML Schema 规范Q但只能处理它的一个子集;?XMLBean 支持它的全部。此外,通过数据以 XML 的Ş式存储在内存中,XMLBean 能够减少~组和解除编l的开销?/P>



Parmy 2006-02-16 11:10 发表评论
]]>
Javaq接数据库方法归?/title><link>http://www.aygfsteel.com/army666/archive/2006/02/14/30597.html</link><dc:creator>Parmy</dc:creator><author>Parmy</author><pubDate>Tue, 14 Feb 2006 06:10:00 GMT</pubDate><guid>http://www.aygfsteel.com/army666/archive/2006/02/14/30597.html</guid><wfw:comment>http://www.aygfsteel.com/army666/comments/30597.html</wfw:comment><comments>http://www.aygfsteel.com/army666/archive/2006/02/14/30597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/army666/comments/commentRss/30597.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/army666/services/trackbacks/30597.html</trackback:ping><description><![CDATA[现在有好多初学jsp的网友经怼问数据库怎么q接啊,怎么老出错啊Q所以我集中的在q写文章供大家参考,其实q种把数据库逻辑全部攑֜jsp里未必是好的做法Q但是有利于初学者学习,所以我p样做了,当大家学C定程度的时候,可以考虑用MVC的模式开发。在l习q些代码的时候,你一定将jdbc的驱动程序放到服务器的类路径里,然后要在数据库里Z个表test,有两个字D|如ؓtest1Qtest2Q可以用下面SQL?<BR>create table test(test1 varchar(20),test2 varchar(20) <BR>然后向这个表写入一条测试纪?<BR>那么现在开始我们的jsp和数据库之旅吧?<BR>一、jspq接Oracle8/8i/9i数据库(用thin模式Q?<BR>testoracle.jsp如下Q?<BR><%@ page contentType="text/html;charset=gb2312"%> <BR><%@ page import="java.sql.*"%> <BR><html> <BR><body> <BR><%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); <BR>String url="jdbc:oracle:thin:@localhost:1521:orcl"; <BR>//orclZ的数据库的SID <BR>String user="scott"; <BR>String password="tiger"; <BR>Connection conn= DriverManager.getConnection(url,user,password); <BR>Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <BR>String sql="select * from test"; <BR>ResultSet rs=stmt.executeQuery(sql); <BR>while(rs.next()) {%> <BR>您的W一个字D内容ؓQ?lt;%=rs.getString(1)%> <BR>您的W二个字D内容ؓQ?lt;%=rs.getString(2)%> <BR><%}%> <BR><%out.print("数据库操作成功,恭喜?);%> <BR><%rs.close(); <BR>stmt.close(); <BR>conn.close(); <BR>%> <BR></body> <BR></html> <BR>二、jspq接Sql Server7.0/2000数据?<BR>testsqlserver.jsp如下Q?<BR><%@ page contentType="text/html;charset=gb2312"%> <BR><%@ page import="java.sql.*"%> <BR><html> <BR><body> <BR><%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); <BR>String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"; <BR>//pubsZ的数据库?<BR>String user="sa"; <BR>String password=""; <BR>Connection conn= DriverManager.getConnection(url,user,password); <BR>Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <BR>String sql="select * from test"; <BR>ResultSet rs=stmt.executeQuery(sql); <BR>while(rs.next()) {%> <BR>您的W一个字D内容ؓQ?lt;%=rs.getString(1)%> <BR>您的W二个字D内容ؓQ?lt;%=rs.getString(2)%> <BR><%}%> <BR><%out.print("数据库操作成功,恭喜?);%> <BR><%rs.close(); <BR>stmt.close(); <BR>conn.close(); <BR>%> <BR></body> <BR></html> <BR>三、jspq接DB2数据?<BR>testdb2.jsp如下Q?<BR><%@ page contentType="text/html;charset=gb2312"%> <BR><%@ page import="java.sql.*"%> <BR><html> <BR><body> <BR><%Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); <BR>String url="jdbc:db2://localhost:5000/sample"; <BR>//sampleZ的数据库?<BR>String user="admin"; <BR>String password=""; <BR>Connection conn= DriverManager.getConnection(url,user,password); <BR>Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <BR>String sql="select * from test"; <BR>ResultSet rs=stmt.executeQuery(sql); <BR>while(rs.next()) {%> <BR>您的W一个字D内容ؓQ?lt;%=rs.getString(1)%> <BR>您的W二个字D内容ؓQ?lt;%=rs.getString(2)%> <BR><%}%> <BR><%out.print("数据库操作成功,恭喜?);%> <BR><%rs.close(); <BR>stmt.close(); <BR>conn.close(); <BR>%> <BR></body> <BR></html> <BR>四、jspq接Informix数据?<BR>testinformix.jsp如下Q?<BR><%@ page contentType="text/html;charset=gb2312"%> <BR><%@ page import="java.sql.*"%> <BR><html> <BR><body> <BR><%Class.forName("com.informix.jdbc.IfxDriver").newInstance(); <BR>String url = <BR>"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver; <BR>user=testuser;password=testpassword"; <BR>//testDBZ的数据库?<BR>Connection conn= DriverManager.getConnection(url); <BR>Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <BR>String sql="select * from test"; <BR>ResultSet rs=stmt.executeQuery(sql); <BR>while(rs.next()) {%> <BR>您的W一个字D内容ؓQ?lt;%=rs.getString(1)%> <BR>您的W二个字D内容ؓQ?lt;%=rs.getString(2)%> <BR><%}%> <BR><%out.print("数据库操作成功,恭喜?);%> <BR><%rs.close(); <BR>stmt.close(); <BR>conn.close(); <BR>%> <BR></body> <BR></html> <BR>五、jspq接Sybase数据?<BR>testmysql.jsp如下Q?<BR><%@ page contentType="text/html;charset=gb2312"%> <BR><%@ page import="java.sql.*"%> <BR><html> <BR><body> <BR><%Class.forName("com.sybase.jdbc.SybDriver").newInstance(); <BR>String url =" jdbc:sybase:Tds:localhost:5007/tsdata"; <BR>//tsdataZ的数据库?<BR>Properties sysProps = System.getProperties(); <BR>SysProps.put("user","userid"); <BR>SysProps.put("password","user_password"); <BR>Connection conn= DriverManager.getConnection(url, SysProps); <BR>Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <BR>String sql="select * from test"; <BR>ResultSet rs=stmt.executeQuery(sql); <BR>while(rs.next()) {%> <BR>您的W一个字D内容ؓQ?lt;%=rs.getString(1)%> <BR>您的W二个字D内容ؓQ?lt;%=rs.getString(2)%> <BR><%}%> <BR><%out.print("数据库操作成功,恭喜?);%> <BR><%rs.close(); <BR>stmt.close(); <BR>conn.close(); <BR>%> <BR></body> <BR></html> <BR>六、jspq接MySQL数据?<BR>testmysql.jsp如下Q?<BR><%@ page contentType="text/html;charset=gb2312"%> <BR><%@ page import="java.sql.*"%> <BR><html> <BR><body> <BR><%Class.forName("org.gjt.mm.mysql.Driver").newInstance(); <BR>String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1" <BR>//testDBZ的数据库?<BR>Connection conn= DriverManager.getConnection(url); <BR>Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <BR>String sql="select * from test"; <BR>ResultSet rs=stmt.executeQuery(sql); <BR>while(rs.next()) {%> <BR>您的W一个字D内容ؓQ?lt;%=rs.getString(1)%> <BR>您的W二个字D内容ؓQ?lt;%=rs.getString(2)%> <BR><%}%> <BR><%out.print("数据库操作成功,恭喜?);%> <BR><%rs.close(); <BR>stmt.close(); <BR>conn.close(); <BR>%> <BR></body> <BR></html> <BR>七、jspq接PostgreSQL数据?<BR>testmysql.jsp如下Q?<BR><%@ page contentType="text/html;charset=gb2312"%> <BR><%@ page import="java.sql.*"%> <BR><html> <BR><body> <BR><%Class.forName("org.postgresql.Driver").newInstance(); <BR>String url ="jdbc:postgresql://localhost/soft" <BR>//softZ的数据库?<BR>String user="myuser"; <BR>String password="mypassword"; <BR>Connection conn= DriverManager.getConnection(url,user,password); <BR>Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <BR>String sql="select * from test"; <BR>ResultSet rs=stmt.executeQuery(sql); <BR>while(rs.next()) {%> <BR>您的W一个字D内容ؓQ?lt;%=rs.getString(1)%> <BR>您的W二个字D内容ؓQ?lt;%=rs.getString(2)%> <BR><%}%> <BR><%out.print("数据库操作成功,恭喜?);%> <BR><%rs.close(); <BR>stmt.close(); <BR>conn.close(); <BR>%> <BR></body> <BR></html> <img src ="http://www.aygfsteel.com/army666/aggbug/30597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/army666/" target="_blank">Parmy</a> 2006-02-14 14:10 <a href="http://www.aygfsteel.com/army666/archive/2006/02/14/30597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebLogic workshop 在JSP中设计用L?/title><link>http://www.aygfsteel.com/army666/archive/2005/12/31/26156.html</link><dc:creator>Parmy</dc:creator><author>Parmy</author><pubDate>Sat, 31 Dec 2005 02:03:00 GMT</pubDate><guid>http://www.aygfsteel.com/army666/archive/2005/12/31/26156.html</guid><wfw:comment>http://www.aygfsteel.com/army666/comments/26156.html</wfw:comment><comments>http://www.aygfsteel.com/army666/archive/2005/12/31/26156.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.aygfsteel.com/army666/comments/commentRss/26156.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/army666/services/trackbacks/26156.html</trackback:ping><description><![CDATA[<div class="wmqeeuq" id=topictitle> <H1 class=Title>?JSP 中设计用L?/H1></DIV> <div class="wmqeeuq" id=topictext> <P>创徏面时QWebLogic Workshop 提供各种标记库,您可以用其中包含的标记设计 JSP。页面流向导生成的每?JSP 文g都定义ؓ包括引用标记库的 <span id="wmqeeuq" class=langinline><% taglib...></SPAN> 语句。例如:</P><PRE><!--?WebLogic Workshop 生成--> <%@ page language="java" contentType="text/html;charset=UTF-8"%> <%@ taglib uri="netui-tags-databinding.tld" prefix="netui-data"%> <%@ taglib uri="netui-tags-html.tld" prefix="netui"%> <%@ taglib uri="netui-tags-template.tld" prefix="netui-template"%> <netui:html>     <head>        <title>           Web 应用E序?        </title>     </head>     <body>        <p>           新徏 Web 应用E序?        </p>     </body> </netui:html></PRE></DIV> <DIV> <P class=notepara><STRONG>注意</STRONG>QWebLogic Workshop ?TLD ?TLDX 库文件置?Web 目?/WEB-INF 文g夹下?nbsp;TLD 文g?J2EE 标准标记库描q符文g。TLDX 文g?WebLogic Workshop 的特定文Ӟ包含有关标记?IDE 中应如何起作用的信息。此信息包括昄、属性表单和其他信息?/P> <P>?IDE 中,如果 JSP 文g在设计视图或源代码视图中打开Q则可以在选项板窗口中获取标记。例如:</P> <P><IMG height=228 src="http://dev2dev.bea.com.cn/download/school/workshop/WorkshopCNHelp/doc/zh/workshop/images/jspPaletteMinimized.gif" width=313></P> <P>可以这些标C“选项李쀝窗口拖攑ֈ设计视图中。在某些情况下,会出C个对话框H口Q允许您操作分配给使用表单 Bean 的标记。例如:</P> <P><IMG height=204 src="http://dev2dev.bea.com.cn/download/school/workshop/WorkshopCNHelp/doc/zh/workshop/images/buttonDrop.gif" width=295></P> <P class=notepara><STRONG>注意Q?/STRONG>在将标记图标从“选项李쀝窗格移动到“设计视䏀画布时Q您会注意到Q在“设计视䏀画布中Q插入点是用垂直U显C的。请C此插入点Q因为它决定标C码在 JSP 中的初始位置?/P> <P class=notepara>JSP 设计器是为开发h员设计的Q开发h员需要快速汇~基?NetUI、NetUI 数据l定?NetUI 模板标记?JSP c作Z个开发h员,您可以创些页的初E,q决定表单操作和其他上下文以简单或复杂的数据显C给用户。在 JSP 设计器中Q可以利用“放|向导”和Q源代码视图中的Q其他代码完成工具以协助开发工作。JSP 设计视图q不是设计用作完全的 JSP 囑Ş~辑器,您可以切换到源代码视图以输入文本Q或者用您喜欢?JSP ~辑产品来完成页Qؓ昄d更多润色?/P> <P>本主题描q“NetUI”库和“NetUI 模板”库中的各种元素。这些库包含用于设计用户界面Q如标签、单选按钮和链接Q的典型lg。这些库中的许多lgQ尤其是表单lgQ允许您为用h供数据或从用户引出数据?/P> <P>此外Q“NetUI 数据l定”库包含用于向用hC复杂数据的专用lg。NetUI 数据l定标记另行<A >?JSP 中显C复杂数据集</A>中讨论?/P> <P class=notepara><STRONG>注意</STRONG>Q“选项李쀝窗口还提供一个称为“HTML”的标记库,该库包含几种标准 HTML 标记。这?HTML 标记不具有可以与面运行时q行交互的特D特性?/P></DIV> <DIV> <H2>NetUI 标记</H2> <P>“选项李쀝窗口中?NetUI lg存储?<span id="wmqeeuq" class=langinline>netui-tag-html.tld</SPAN> 库中Q此库是默认导入 JSP 的:</P> <P class=codeblock><%@ taglib uri="netui-tags-html.tld" prefix="netui"%></P> <P>?NetUI lgd?JSP Ӟ您会注意到组件名U的前缀为“netui”,例如Q?/P> <P class=codeblock><FONT face="Courier New, Courier, mono"><netui:button value="Start" action="letsGo" type="submit"/></FONT></P> <P>下表ȝ?NetUI 标记的常见用途。有x记及其特性的详细描述Q请参阅 <A >JSP 标记引用</A>Q也可以在源代码视图中将光标|于标记内部q按 <span id="wmqeeuq" class=langinline>F1</SPAN> 键:</P> <TABLE cellPadding=5 width="100%" border=1> <TBODY> <TR> <TD><STRONG>标记的典型用?/STRONG></TD> <TD><STRONG>标记?/STRONG></TD> <TD><STRONG>概要</STRONG></TD></TR> <TR> <TD><STRONG>D</STRONG></TD> <TD>anchor</TD> <TD>生成指向特定 URI ?URL ~码链接?/TD></TR> <TR> <TD> </TD> <TD>imageAnchor</TD> <TD>生成一个用 URL ~码的超链接Q链接到指定 URIQ此 URI 有一个作为正文包含进来的囑փ?/TD></TR> <TR> <TD> </TD> <TD>button</TD> <TD>生成名称是只ȝ按钮Q通常用于重置或提交表单,或触发特定操作(如“signing out”)?/TD></TR> <TR> <TD> </TD> <TD>imageButton</TD> <TD>生成一个作为按钮的囑փQ包括图像的 URL 和(可选)悬停囑փQ通常用于提交表单?/TD></TR> <TR> <TD><STRONG>?写数?/STRONG>Q?dataSource、defaultValue Ҏ)</TD> <TD>form</TD> <TD>代表一个与表单 Bean 兌的输入表单,此表?Bean 的属性与表单的各个字D늛对应?/TD></TR> <TR> <TD> </TD> <TD>checkBox</TD> <TD>生成一个绑定到表单 Bean 属性的复选框?/TD></TR> <TR> <TD> </TD> <TD>checkBoxGroup</TD> <TD>?CheckBoxOption 集合q行归组Qƈ处理其值的数据l定。有关示例,请参?A >面详l示?/A>?/TD></TR> <TR> <TD> </TD> <TD>checkBoxOption</TD> <TD>一个复选框Q其状态由包含它的 checkBoxGroup 定?/TD></TR> <TR> <TD> </TD> <TD>hidden</TD> <TD>生成隐藏表单字段?/TD></TR> <TR> <TD> </TD> <TD>radioButtonGroup</TD> <TD>?RadioButtonOption 集合q行归组Qƈ处理其值的数据l定。有关示例,请参?A >面详l示?/A>?/TD></TR> <TR> <TD> </TD> <TD>radioButtonOption</TD> <TD>单选按钮,状态由包含它的 RadioButtonGroup 定?/TD></TR> <TR> <TD height=41> </TD> <TD>select</TD> <TD>渲染下拉列表。有关示例,请参?A >面详l示?/A>?/TD></TR> <TR> <TD> </TD> <TD>selectOption</TD> <TD>选项Q状态由包含它的 select lg定?/TD></TR> <TR> <TD> </TD> <TD>textArea</TD> <TD>渲染数据l定?TextArea?/TD></TR> <TR> <TD> </TD> <TD>textBox</TD> <TD>渲染数据l定?TextBox?/TD></TR> <TR> <TD height=58><STRONG>错误报告</STRONG></TD> <TD>bindingUpdateErrors</TD> <TD>开发时帮助标记Q显C发送表单时发生的数据绑定更新错误的相关消息。这些消息显C在命oH口中。默认情况下Q此标记在服务器以生产模式运行时是禁用的?</TD></TR> <TR> <TD> </TD> <TD>error</TD> <TD>使用l定错误键值渲染单个错误消息。有兌l信息,请参?A >验证用户输入</A>?/TD></TR> <TR> <TD> </TD> <TD>errors</TD> <TD>渲染发现的错误消息集。有兌l信息,请参?A >验证用户输入</A>?/TD></TR> <TR> <TD> </TD> <TD>exceptions</TD> <TD>渲染已格式化的异常消息?/TD></TR> <TR> <TD><STRONG>参数</STRONG></TD> <TD>parameter</TD> <TD>?URL 参数写入其父标记中的 URL。有关示例,请参?A >在页面流中用数据绑?/A>中的 <span id="wmqeeuq" class=langinline>url</SPAN> 数据l定上下文?/TD></TR> <TR> <TD> </TD> <TD>parameterMap</TD> <TD>?URL 参数映射中的每个参数写入其父标记中的 URL?/TD></TR> <TR> <TD><STRONG>其他</STRONG></TD> <TD>base</TD> <TD>提供此页中每?URL 的基?/TD></TR> <TR> <TD> </TD> <TD>content</TD> <TD>昄只读的标准或动态生成的文本?/TD></TR> <TR> <TD> </TD> <TD>image</TD> <TD>生成囑փ? </TD></TR> <TR> <TD height=40> </TD> <TD>label</TD> <TD>Ҏ数据l定表达式或字面值生成样式化的只L本?/TD></TR> <TR> <TD> </TD> <TD>node</TD> <TD>实例?TreeNode 对象Q该对象要d到父标记Q树或其它节点)中?/TD></TR> <TR> <TD> </TD> <TD>tree</TD> <TD>渲染一个由 TreeNode 对象集代表的树控件?/TD></TR></TBODY></TABLE></DIV> <DIV> <H2>Netui 模板标记</H2> <P>“选项李쀝窗口中?NetUI 模板lg存储?<span id="wmqeeuq" class=langinline>netui-tag-template.tld</SPAN> 库中Q此库是默认导入 JSP 的:</P> <P class=codeblock><%@ taglib uri="netui-tags-template.tld" prefix="netui-template"%></P> <P>?NetUI 模板lgd?JSP Ӟ您会注意到组件名U的前缀为“netui-template”,例如Q?/P> <P class=codeblock><netui-template:visible visible="true">Is Visible</netui-template:visible></P> <P>此库中的标记通常用于定义地点模板。模杉K是一?JSP ,用于定义一l页的M外观及感觉。这是通过提供M布局l构、样式和面设计Qƈ定义内容占位W完成的。这些占位符UCؓ部分。内定w是一个包含内容的 JSP c内定w提供插入模板内容的各个部分。将内容和模板进行组合,可以创徏内容的M外观及感觉。模板的一大优势在于可以更改一l页的外观及感觉Q而不必强制修Ҏ个页?/P> <P>NetUI 模板库定义了两类标记集。第一cȝ于在 JSP 模板中定义占位W(q是内容|供内容的地方Q。第二类标记集用于内定w内部Q可以指C使用的模板和定义要在模板内昄的内宏V?/P> <P>下表ȝ?NetUI 模板标记的常见用途。有x记及其特性的详细描述Q请参阅 <A >JSP 标记引用</A>Q也可以在源代码视图中将光标|于标记内部q按 <span id="wmqeeuq" class=langinline>F1</SPAN> 键:</P> <TABLE cellPadding=5 width="100%" border=1> <TBODY> <TR> <TD width="26%"><STRONG>标记?/STRONG></TD> <TD width="21%"><STRONG>标记?/STRONG></TD> <TD width="53%"><STRONG>概要</STRONG></TD></TR> <TR> <TD><STRONG>模板?/STRONG></TD> <TD>attribute</TD> <TD>定义模板文g中的Ҏ。与内容 JSP 中的 <span id="wmqeeuq" class=langinline>setAttribute</SPAN> 联合使用?/TD></TR> <TR> <TD> </TD> <TD>includeSection</TD> <TD>定义模板文g中的一个部分,使用 <span id="wmqeeuq" class=langinline>section</SPAN> 标记Q内?JSP 可以q一步填充此部分?/TD></TR> <TR> <TD><STRONG>内容?/STRONG></TD> <TD>setAttribute</TD> <TD>讄在模板文件中声明的特性的倹{?/TD></TR> <TR> <TD> </TD> <TD>section</TD> <TD>引用 <span id="wmqeeuq" class=langinline>includeSection</SPAN> q定义要包括的内宏V?/TD></TR> <TR> <TD> </TD> <TD>template</TD> <TD>指定要用的模板?/TD></TR> <TR> <TD><STRONG>二者之一</STRONG></TD> <TD>visibility</TD> <TD>使一个部分可见或不可见?/TD></TR></TBODY></TABLE> <P>要查看用模板标记的样例应用E序Q请转至下列面ƈ?JSP 文gQ?/P></DIV> <DIV> <P><FONT face="Courier New, Courier, mono"><WEBLOGIC_HOME>\samples\workshop\SamplesApp\WebApp\simpleflow</FONT></P> <P>另请参阅 template.jsp ?header.jsp 文gQ它们位于:</P> <P><FONT face="Courier New, Courier, mono"><WEBLOGIC_HOME>\samples\workshop\SamplesApp\WebApp\resources\jsp</FONT></P></DIV><img src ="http://www.aygfsteel.com/army666/aggbug/26156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/army666/" target="_blank">Parmy</a> 2005-12-31 10:03 <a href="http://www.aygfsteel.com/army666/archive/2005/12/31/26156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebLogic Workshop 验证用户输入http://www.aygfsteel.com/army666/archive/2005/12/30/26075.htmlParmyParmyFri, 30 Dec 2005 08:02:00 GMThttp://www.aygfsteel.com/army666/archive/2005/12/30/26075.htmlhttp://www.aygfsteel.com/army666/comments/26075.htmlhttp://www.aygfsteel.com/army666/archive/2005/12/30/26075.html#Feedback0http://www.aygfsteel.com/army666/comments/commentRss/26075.htmlhttp://www.aygfsteel.com/army666/services/trackbacks/26075.html

验证用户输入

在大多数情况下,当用户通过表单输入数据Ӟ我们要确保输入的值有效,然后才能q行其他操作Q例如将数据储存到数据库中或用于定下一步操作。表单验证经怋用客L JavaScript 来完成。此Ҏ?WebLogic Workshop 中也适用。此外,服务器端的验证可在服务器端检查用戯入。后一Ҏ的优ҎQ?/P>

  • 不必依赖对其没有控制权的览器功能?/DIV>
  • 可以使用控制器文件中的其他业务逻辑装验证逻辑?
  • 可以在受媄响表单字D|的表单中昄错误消息Q而无需弹出对话框?/DIV>

客户端的验证

WebLogic Workshop ?netui:form 标记及其表单字段提供了许多特性,例如Q可以用来调?JavaScript ?onClick ?onBlur。例如,可以?netui:textBox 标记Q用户在其中输入他们的年龄:

<netui:textBox dataSource="{actionForm.age}" onBlur="isValidAge()"/>

q是 JavaScript 函数 isValidAge 的示例,该函数在 onBlur Ҏ中提到Q?

function isValidAge() {
   if(document.forms[0].elements[1].value <= 0)
       alert('Wrong Age');
}

当用戯入值ƈ转到下一个表单字D后Q?SPAN class=langinline>onBlur Ҏ会调用 JavaScript 函数 isValidFormQ当输入的年龄认为无效时Q该函数显C对话框?/P>

h意,在示例中是?JavaScript forms ?elements 数组讉K表单及其字段的。如果想使用各种字段的正名Uͼ需要?tagID Ҏ以?WebLogic Workshop JavaScript 函数 getNetuiTagName。还需要用 <netui:html> 替换 <html> 标记。重写上一CZQ代码将如下所C:

<netui:html>
     ...
     
    <netui:textBox tagId="age" dataSource="{actionForm.age}" onBlur="isValidAge();"/>
     ...
</netui:html>

而且q将?JavaScript 函数 isValidAgeQ?/P>

function isValidAge() {
   if(document[getNetuiTagName("myForm")][getNetuiTagName("age")].value <= 0)
       alert('Wrong Age');
}

h意,我们使用 getNetuiTagNameQ而不?elements[1]Q来引用元素?tagID。也可以推导出,在整个样例中Q?SPAN class=langinline>netui:form 标记包含 tagID="myForm"Q?SPAN class=langinline>netui:form 标记q没有实际显C在上述样例代码中)?/P>

q些Ҏ也可以与表单的提交操作一起用。对?netui:button ?netui:imageButton 标记Q可以通过标记?onClick Ҏ调?JavaScript 函数Q如下例所C:

<netui:button value="submit" onClick="return isValidForm();" />

当用户单L钮时Q如果验证成功,JavaScript 函数 isValidForm 会检查表单字Dƈq回 true。或者,如果不是所有的输入值都正确Q?SPAN class=langinline>isValidForm 函数昄带有错误消息的对话框Qƈq回 false。(此功能的实现q没有实际显C在样例代码中。)

对于 netui:anchor ?netui:imageAnchor 标记Q两者的实现依赖?JavaScript 提交表单Q,如果验证成功QJavaScript 验证函数必须包含其他代码以设|?JavaScript Form 对象?method ?action 属性,q调用其 submit Ҏ。下列示例(使用与上一CZ相同?tagID ?JavaScript 函数 isValidFormQ说明,当表单验证成功时如何讄各种属性ƈ调用 submit ҎQ?

function submitFromAnchor() {
    document[getNetuiTagName("myForm")].method="POST";
    document[getNetuiTagName("myForm")].action="/ClientSideValidation/thankYou.do";
    if(isValidForm())
        document[getNetuiTagName("myForm")].submit();  
} 

如示例所C,表单?method 属性必设|ؓ POST?SPAN class=langinline>action 属性必设|ؓ当用户单d位点q提交表单时要调用的操作的全名。此操作名与 Web 应用E序名(后接 JPF 文g中的操作Ҏ名)相对应,后接 DO 扩展名。在CZ中,Web 应用E序 ClientSideValidation 的页面流 JPF 文g包含操作Ҏ thank You?/P>

不?getNetuiTagName 也可以编写相同的函数Q如下例所C:

function submitFromAnchor() {
    document.forms[0].method="POST";
    document.forms[0].action="/ClientSideValidation/thankYou.do";
    if(isValidForm())
         document.forms[0].submit();  
}

最后,netui:anchor ?netui:imageAnchor 标记必须调用 onClick Ҏ中?JavaScript 函数q添加?SPAN class=langinline>return false;”,如下例所C:

<netui:anchor onClick="submitFromAnchor(); return false;" action="thankYou">Submit</netui:anchor> 

如果没有d表达式?SPAN class=langinline>return false;”,始l提交表单,且数据不会发布到表单 Bean?/P>

服务器端的验?/H2>

WebLogic Workshop 提供两种完成服务端验证的ҎQ一U是在表?Bean 中?Java 来实?validate ҎQ另一U是使用 Struts ValidatorPlugIn q行Z XML 的验证。这些示例会?WebLogic Workshop 样例应用E序中显C,q在此处对其q行描述。要获得样例代码Q请在下列安装位|开始:

<WEBLOGIC_HOME>/samples/workshop/SamplesApp/WebApp/validation/...

Z Java 的验?/H3>

要用表?Bean ?validate Ҏ验证用户输入Q请按照此列表中概述的步骤进行操作。请注意Q这些示例来自下列样例页面流和相xӞ

<WEBLOGIC_HOME>/samples/workshop/SamplesApp/WebApp/validation/basic

  • ?message-resources 标记d?JPF 文g中的控制器类Q例如:
    /**
    * @jpf:controller nested="true"
     * @jpf:message-resources resources="validation.basic.Messages"
     * 
    */ public class Controller extends PageFlowController { ...

    资源文g位于 Web 目?/WEB-INF/classes/... 文g夹下Qƈh properties 扩展名。在上例中,Messages.properties 文g位于 /WEB-INF/classes/validation/basic。下文将描述此文件的内容?

    注意Q?/STRONG>在示例中Q请注意此处使用的对应命名要求。如果消息资源文件是 <project-root>/WEB-INF/classes/validation/basic/Messages.propertiesQ则?<project-root>/validation/basic/*.jpf 面批注中引用此文件的Ҏ?@jpf:message-resources resources="validation.basic.Messages"?

  • ?@jpf:validation-error-forward ҎdC用验证的操作。例如:
     /**
    * @jpf:action 
    * @jpf:forward name="success" path="success.jsp"
      * @jpf:validation-error-forward name="failure" return-to="currentPage"
      */
    public Forward submitForm( Form form )
      {
    return new Forward( "success" );
      }

    此批注提供灵zȝ机制Q如果由于运行了Ҏ的操作而出现表单验证错误,它可以指明应装蝲哪个面或应q行哪个操作。有兌l信息,请参?@jpf:validation-error-forward Ҏ主题?

    下列视囑ֱq说明了此样例页面流中的操作和页面之间的关系?/P>

  • ?validate Ҏd到表?Bean cR此Ҏ必须hCZ中给出的切{֐Q?
    public ActionErrors validate( ActionMapping mapping, HttpServletRequest request )
    {
        ActionErrors errs = new ActionErrors();
        int at = _email.indexOf( '@' );
        int dot = _email.lastIndexOf( '.' );
        if ( at == -1 || at == 0 || dot == -1 || at > dot )
        {
           errs.add( "email", new ActionError( "badEmail" ) );
        }
        if ( _zipCode.length() != 5 )
        {
           errs.add( "zipCode", new ActionError( "badZip", new Integer( 5 ) ) );
        }
        return errs;
    }

    ?validate Ҏ中,实现各种表单字段的验证逻辑。如果出现错误,h加新的操作错误。在CZ中,zipCode 引用?JSP (<netui:error value="zipCode"/>) 中的 netui:error 标记Q?SPAN class=langinline>badZip 引用?Messages.properties 文g中的消息密钥。请注意Q?SPAN class=langinline>new Integer(5) 是错误字W串中的W一个替换对象。例如,在以后的描述中可以看C个消息字W串Q?“The zip code has to be exactly {0} characters.”。这U情况下Q?SPAN class=langinline>Integer(5) 对象替?{0}。ActionErrors 支持最多带有四个附加替换对象的构造方法?/P>

    有关完整CZQ请参阅<WEBLOGIC_HOME>/samples/workshop/SamplesApp/WebApp/validation/basic/Controller.jpf 中的面控制器cR?/P>

  • 在显C错误(通常是表单页面)?JSP 文g中,d netui:error 标记以显C错误消息。例如:
        <netui:form action="submitForm">
    <table>
    <tr>
    <td><p>Enter E-mail Address:</p></td>
    <td>
    <netui:textBox dataSource="{actionForm.email}"/>
    </td>
    <td>
    <netui:error value="email"/>
    </td>
    </tr>

    <tr>
    <td><p>Enter 5-digit Zip Code:</p></td>
    <td>
    <netui:textBox dataSource="{actionForm.zipCode}"/>
    </td>
    <td>
    <netui:error value="zipCode"/>
    </td>
    </tr>
    </table>
            <netui:button>Submit</netui:button>
            <netui:button action="exit">Exit</netui:button>
        </netui:form> 

    在示例中Q将在相兌单字D|昄错误。有兛_整示例,请参?lt;WEBLOGIC_HOME>/samples/workshop/SamplesApp/WebApp/validation/basic/formPage.jsp?

  • 另外Q或作ؓ替代ҎQ,可以?netui:errors 标记d?JSP (<netui:errors/>)Q例如在 JSP 底部。此标记显C所有找到的错误概要?
  • 当在 JSP 中显C错误时Q资源文件包含实际的错误消息和要应用的Q何专?HTML 格式。请CQ此文g位于 /WEB-INF/classes/... 下,q具?properties 扩展名。在此示例中QMessages.properties 文g位于 /WEB-INF/classes/validation/basic中?/SPAN>
    badEmail=Bad email address.
    badZip=The zip code has to be exactly {0} characters.
    errors.header=<br><hr><font color="Blue">List of errors, using the &lt;netui:error&gt; tag:<ul>
    errors.prefix=<li>
    errors.suffix=
    errors.footer=</ul></font>
    error.prefix=<font color="Red">
    error.suffix=</font>

    h意,在示例中Q当输入不正的 zipCode ӞbadZip 是需要显C的错误消息的消息密钥。文件中的其他行创徏 netui:error ?netui:errors 标记的格式,以便单个错误消息用红色显C,错误概要用蓝色显CZؓ一个列表,前加标头“List of errors, using the <netui:error> tag:”?/P>

Z XML 的验?/H3>

要?Struts ValidatorPlugIn 验证用户输入Q请按照此列表中概述的步骤进行操作。请注意Q这些示例来自下列样例页面流和相xӞ

<WEBLOGIC_HOME>/samples/workshop/SamplesApp/WebApp/validation/validator

  • ?message-resources ?struts-merge Ҏd?JPF 文g中的控制器类。例如:
    /**
     * @jpf:controller nested="true" struts-merge="/WEB-INF/strutsValidator-merge-config.xml"
    * @jpf:message-resources resources="validation.validator.Messages"          
     * 
     */
    public class Controller extends PageFlowController
    { 
    ...

    @jpf:controller Ҏ?struts-merge Ҏ会标识用的 Struts 合ƈ文g。此 Struts 合ƈ文g指?Struts ValidatorPlugIn 及其规则。以后会在此列表中对合ƈ文gq行描述?

    资源文g也位?Web 目?/WEB-INF/classes/... 文g夹下Qƈh properties 扩展名。在上例中,Messages.properties 文g位于 /WEB-INF/classes/validation/validator。请注意此处使用的对应命名要求。如果消息资源文件是 <project-root>/WEB-INF/classes/validation/validator/Messages.propertiesQ则?<project-root>/validation/validaor/*.jpf 面批注中引用此文件的Ҏ?@jpf:message-resources resources="validation.basic.Messages"?

  • ?@jpf:validation-error-forward ҎdC用验证的操作。例如:

    /** * @jpf:action * @jpf:validation-error-forward name="failure" return-to="currentPage" * @jpf:forward name="success" path="success.jsp" */ public Forward submitForm( MyForm form ) { return new Forward( "success" ); }

    此批注提供灵zȝ机制Q如果由于运行了Ҏ的操作而出现表单验证错误,它可以指明应装蝲哪个面或应q行哪个操作。有兌l信息,请参?@jpf:validation-error-forward Ҏ主题?

  • 在页面流中,修改表单 Bean 定义以扩?Struts ?ValidatorForm 界面Q?
     public static class MyForm extends org.apache.struts.validator.ValidatorForm
    {
    ...
    有关此表?Bean cȝ完整CZQ请参阅 <WEBLOGIC_HOME>/samples/workshop/SamplesApp/WebApp/validation/validator/Controller.jpf?
  • 在显C错误(通常是表单页面)?JSP 文g中,d netui:error 标记以显C错误消息:
        <netui:form action="submitForm">
    <table>
    <tr>
    <td><p>Enter E-mail Address:</p></td>
    <td>
    <netui:textBox dataSource="{actionForm.email}"/>
    </td>
    <td>
    <netui:error value="email"/>
    </td>
    </tr>

    <tr>
    <td><p>Enter Age:</p></td>
    <td>
    <netui:textBox dataSource="{actionForm.age}"/>
    </td>
    <td>
    <netui:error value="age"/>
    </td>
    </tr>
    </table>
            <netui:button>Submit</netui:button>
            <netui:button action="exit">Exit</netui:button>
        </netui:form> 

    在示例中Q将在相兌单字D|昄错误。有兛_整示例,请参?lt;WEBLOGIC_HOME>/samples/workshop/SamplesApp/WebApp/validation/validaor/formPage.jsp?

  • 另外Q或作ؓ替代ҎQ,可以?netui:errors 标记d?JSP (<netui:errors/>)Q例如在 JSP 底部。此标记显C所有找到的错误列表?
  • 定义 struts-merge 文g以指?Struts 的默认可插接验证器定义文?validator-rules.xmlQ以及包含此特定表单的实际验证规则的 XML 文g。在CZ中,合ƈ文g strutsValidator-merge-config.xml 定义如下。可以在下列位置扑ֈ此合q文Ӟ

    <WEBLOGIC_HOME>/samples/workshop/SamplesApp/WebApp/WEB-INF

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
    "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
    <struts-config>
       <form-bean/>
       <global-exceptions/>
       <global-forwards/>
       <action-mappings>
       </action-mappings>
     <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
       <set-property property="pathnames"
       value="/WEB-INF/validator-rules.xml,/WEB-INF/strutsValidator-validation.xml"/>
     </plug-in>
    </struts-config>

    默认可插接验证器定义包含?validator-rules.xml 文g中,该文件位?WEB-INF 中。实际的表单验证规则应在单独的文件中定义。在CZ中,该文件称?strutsValidator-validation.xmlQ它也位?/WEB-INF 中。下面将描述此文件?
  • ?strutsValidator-validation.xml 文g中,使用默认验证器定义实现实际的表单验证。例如:
    <form-validation>
    <formset>
    <form name="myForm">
    <field property="email" depends="required">
    <arg0 key="email.displayName"/>
    </field>
    <field property="age" depends="required,integer">
    <arg0 key="age.displayName"/>
    </field>
    </form>
    </formset>
    </form-validation>
  • 当在 JSP 文g中显C错误时Q资源文件包含实际的错误消息和要应用的Q何专?HTML 格式。请CQ此文g位于 WEB-INF/classes/... 下,q具?properties 扩展名。在此示例中QMessages.properties 文g位于 /WEB-INF/classes/validation/validator 中?/SPAN>
    errors.header=<br><hr><font color="Blue">List of errors, using the &lt;netui:error&gt; tag:<ul>
    errors.prefix=<li>
    errors.suffix=
    errors.footer=</ul></font>
    error.prefix=<font color="Red">
    error.suffix=</font>
    errors.required={0} is required.
    errors.integer={0} must be an integer.
    email.displayName=The email address 
    age.displayName=The age

    h意,在示例中Q?SPAN class=langinline>email.displayName 描述表单字段名,?errors.required 描述用于~少Q但必需Q表单字D项的错误消息。如果用h有键入电子邮件地址Q则出现的错误消息将是“The email address is required”。文件中的其他行创徏 netui:error ?netui:errors 标记的格式,以便单个错误消息用红色显C,错误概要用蓝色显CZؓ一个列表,前加标头“List of errors, using <netui:error> tag:”?/P>



Parmy 2005-12-30 16:02 发表评论
]]>
初次认识java.http://www.aygfsteel.com/army666/archive/2005/12/29/25850.htmlParmyParmyThu, 29 Dec 2005 03:01:00 GMThttp://www.aygfsteel.com/army666/archive/2005/12/29/25850.htmlhttp://www.aygfsteel.com/army666/comments/25850.htmlhttp://www.aygfsteel.com/army666/archive/2005/12/29/25850.html#Feedback0http://www.aygfsteel.com/army666/comments/commentRss/25850.htmlhttp://www.aygfsteel.com/army666/services/trackbacks/25850.htmlW一ơ用Java博客Q没有什么好写的Q{载了一关于java的基知识的认识?BR>


以下是Java标准技术的一些要点:
一、Java的跨q_性,即一ơ编译到处运?单地说Java的跨q_性就是指Q编译后的JavaE序可直接在不同的^Cq行而不用重新编译,q一Ҏ得Java随着Web应用的普及而迅速普及v来。而Java的跨q_性是如何实现的呢Q这p理解Java虚拟机和字节码的概念?  实际上,~译后的Java代码q不是传l的二进制代码(如Windows下的.exe文gQ,而是Java字节码,q种字节码文件是不能直接在操作系l上执行的。要惛_一个操作系l上q行一个JavaE序必须有一个中间环节来负责Java字节码解释成二进制码Q这个中间环节就是Java虚拟机(UJVM)。由于目前大多数操作pȝ已经实现了JVMQ所以JavaL实现跨^台性?  
二、面象对象技?nbsp;           Java全面支持面象对象技术,q体现在ClassQ类Q是JavaE序构成的基本单元,一个JavaE序通常p多Classl成Q而且q些Classq会有一定的l承关系QJava支持Class的单l承Q从而ɾcM间的l承关系更明。承的l果产生cȝ多态性,cȝ多态本质上讲就是可以用父类的引用访问承类的实玎ͼ子类对象Q,cȝq种多态性最lŞ成了lg对象模型的基Q即通过接口Q父c)讉K实现Q子c)?  
三、Java中的I/O操作   Java中以字节(InputStream和OutputStream)、节W流QReader和Writer)来分别读写二q制数据和字W数据,使用非常单有效。Javacd中的FilecM仅提供文件操作而且q包含文件夹操作Q如下面q几行代码可以列出C盘根目录下的所有文Ӟ File f=new File("c://"; String [] m_dir= f.list(); for(int i=0;i<m_dir.length;i++) System.out.println(m_dir);
四、Java中的囑Ş及事件处?可以用awt包或swing包的JavacLq行大部分的Java囑Ş界面设计Q下面的几行代码生一?00*200像素的窗体: Frame f=new Frame("Welcome"; f.setSize(200,200); f.setVisible(true); 默认情况下,FrameH体的关闭按钮不起作用,q也是Java初学者迷惑的地方。ؓ了用户按下关闭按钮时能关闭FrameH体Q需要让q个H体响应一个WindowEvent事gQ具体的做法是l这个窗体添加一个事件监听器对象Q这个事件监听器是WindowListener接口的实现。在上面的代码中插入如下代码可以关闭窗体: f.addWindowListener(new WindowAdapter(){ ??public void windowClosing(WindowEvent e){ System.exit(0); ??} } q里用到一个无名内部类Q无名内部类是Java中内部类的一U灵z运用方式?
五、Java中线E及同步控制 U程概念的引入是Z实现q行处理Q从而提高程序的效率。Java中的U程实现非常单,可以用两U方式来创徏U程Q一U是实现Runnable接口Q另一U是l承Threadc重写run()Ҏ。两U方式唯一的不同就是前者保留了l承一个类的可能(因ؓJava只支持类的单l承Q但接口没有此限Ӟ?  永远都用start()Ҏ来启动一个线E,U程cM的run()可以被直接调用,但决不是启动一个线E,二者有着本质的区别?  用同步控制关键字synchronized来保护线E敏感数据,synchronized块中的内容可以保证同一时刻只能被一个线E访问,所以其中的数据是线E安全的?  用ObjectcM的wait()和notify()Ҏ可以实现U程间交互,但要Cwait()和notify()Ҏ只有发生在同一个对象上才能真正实现U程间交互。被某一对象wait()Ҏd的线E需要另外一个调用了同一对象notify()的线E干预才能恢复运行。notify()Ҏ一ơ唤醒一个被wait()Ҏd的线E,notifyAll()Ҏ可以一ơ唤醒所有被wait()Ҏd的线E?  
六、Java本地ҎQnativeҎQ的实现   Java不是完美的,Java的不除了体现在q行速度上要比传l的C++慢许多之外,Java无法直接讉K到操作系l底层(如系l硬件等)Qؓ此Java使用nativeҎ来扩展JavaE序的功能?  可以nativeҎ比作JavaE序同EE序的接口,
其实现步骤:   
Q、在Java中声明native()ҎQ然后编译;   
Q、用javah产生一?h文gQ?  
Q、写一?cpp文g实现native导出ҎQ其中需要包含第二步产生?h文gQ注意其中又包含了JDK带的jni.h文gQ;   
Q、将W三步的.cpp文g~译成动态链接库文gQ?  
Q、在Java中用System.loadLibrary()Ҏ加蝲W四步生的动态链接库文gQ这个native()Ҏ可以在Java中被讉K了?  
上述所提及的一些Java技术具有一定的普遍性,它们基本上是在Java各个斚w的运用中都需要掌握的术。实际上Java的运用非常广泛,而且每个斚w都需要遵循不同的规范。以下是对Java应用的简要介l?
Q一Q理解Java SDK的三个版本: Java SDK Micro Edition (J2ME) 用于开发掌上电脑、手机等Ud通信讑֤上用的应用E序。ƈ不是所有的Ud讑֤都支持JavaQ只有具备J2MEq行环境QJVM+J2ME API)的设备才能运行JavaE序。J2ME的集成开发工P通常都有带有一些访真器Q有 Sun 的J2ME Wireless Toolkit 、IBM的Visul Age Micro Edition {?Java SDK Standard EditionQJ2SE) 主要用于开发一般台式机应用E序。我们^时所说的JDK指J2SEQ而我们学Java是从学习J2SE开始的?Java SDK Enterprise Edition (J2EE) 用于开发分布式的企业大型应用E序。其中的核心是Entetprise Java BeansQEJBQ分布式JavalgQ的开发?
Q二QJava程?QApplet) Java程序是一个承了Appletcdƈ重写了init()、paint()、stop(){方法的的Javac,它被布v在Web服务器(如IISQ上Q当客户端请求Web|Q浏览器从Web服务器上其下蝲到本地客LQ然后,览器创Appletcȝ实例q调用其init()ҎQ从安全角度考虑QApplet没有讉K本地文g的权限。由于Applet是被览器执行的Q所以Applet不需要一个main()Ҏ。实际上Q除了Java Application之外Q所有其它Java应用都不需要一个main()Ҏ?
Q三Q服务器端Java程?QServletQ?Servlet也是一个Javac,和Applet形成ҎQServlet是运行于服务器端的Java程序,而且Servlet需要一个单独的Web服务器(如TomcatQ做容器。除此之外,Servlet中用到的一些类Q如HttpServlet)q不包含在J2SE API中,所以需要将Servlet.jarQ在Tomcat的common\lib文g夹下Q加到环境变量中厅R下面是一个简单的Servlet例子Q?
public class Myservlet extends HttpServlet{ ??public void doGet(HttpServletRequest request,HttpServletResponse response) { ??try{ response.setContentType("text/html"; PrintWriter out=response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("Hello world"); out.println("</body>"); out.println("</html>"); ??}catch(IOException e){} } } 这个Class文g~译后放至Tomcat\webapps\examples\WEB-INF\classes下,然后在浏览器地址栏里输入http://127.0.0.1:8080/examples/servlet/Myservlet卛_看到 Hello world出现在浏览器中?
Q四QJava Server Page QJSPQ?同Servlet怼的是QJSPq行于Web服务器端Qƈ且也需要Tomcat之类的容器。不同的是,׃JSP是将Java代码嵌在html标记里(同ASP一L<% ...%>)QJSP的界面设计同后台开发h员的工作可以有效分离。可以想像让开发h员用Servlet写一个花捎的Web面有多困难Q所以JSP+Servlet混合Web应用是比较理想的选择?看v来JSP同ASP的实现机制大同小异,其实也存在着本质的区别。所有的ASP面都是解释q行的,而JSP在W一ơ被h时会被编译,再以后的客户h都是直接q行服务器上?class文gQ在Tomcat的Work文g夹下Q,所以JSP要比ASP速度上快许多?
Q五QJava Beans Java Bean 是可复用的组Ӟ对Java Beanq没有严格的规范Q理ZԌM一个Javac都可以是一个Bean。但通常情况下,׃Java Bean是被容器所创徏Q如Tomcat)的,所以Java Bean应具有一个无参的构造器Q另外,通常Java Beanq要实现Serializable接口用于实现Bean的持久性?
Q六QEnterprise Java Beans QEJBQ?Java Bean实际上相当于微YCOM模型中的本地q程内COMlgQ它是不能被跨进E访问的。Enterprise Java Bean 相当于DCOMQ即分布式组件。它是基于Java的远E方法调用(RMIQ技术的Q所以EJB可以被远E访问(跨进E、跨计算机)。但EJB必须被布|在诸如Webspere、WebLogicq样的容器中QEJB客户从不直接讉K真正的EJBlgQ而是通过其容器访问。EJB容器是EJBlg的代理,EJBlg由容器所创徏和管理。客户通过容器来访问真正的EJBlg?q种模型很像COM+理器,其实EJB容器正是起到COM+理器的作用Q只是EJBlg相对COMlg来说更易用、更安全?ȝ说来QJava作ؓ面象对象技术的一个代表,在当今商业应用中更容易开发出高效的、多层的分布式应用程序,而且Q由于Java技术有很强的健壮性和易用性,加上同UML应用的结合,开发一个商业应用Y件的周期会大大羃短,所以Java会有不错的前景?/FONT>



Parmy 2005-12-29 11:01 发表评论
]]>
վ֩ģ壺 | | | Ϫ| | | | פ| ͬ| ±| | | | ̩| ƽɽ| Դ| ¡Ң| | Ԫ| °Ͷ| | º| | ĵ| | ɳ| Ͳ| | ͼľ| | | ͨμ| | | | ؼ| | | ̩| Ͽ| |