浏览 1895 次
该帖已经被评为隐藏帖
|
|||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | ||||||||||||
发表时间:2007-10-03
<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype>
1.Logon.jsp<o:p></o:p>
许多Web应用需要处理表单,下面我们从logon.jsp入手,看看Struts2处理表单的机制。
Logon.jsp<o:p></o:p>
说明:
页面中用到了struts2的3个标签:textfield,password,submit。大家可以“望文生义”,这里不再多说。
承接上文的struts.xml的配置(见附录1),我们在地址栏中输入:
可相应的调出Login.jsp。
提示:因为这里对应struts.xml中的如下配置
记住,这句话必须写在action声明部分的最后,如果写在前面,很有可能导致后面的action配置被忽略,因为检索到这里,就能得到正确的配置结果。
2.Logon.java<o:p></o:p>
相当于struts1中的Form,我们建立Logon.java,其中有username和password的设置。
Logon.java<o:p></o:p>
说明:
1.setXXX和getXXX方法可得到和处理Login.jsp表单中的数据。
2.isInvalid()方法做个简单的判断,只要username和password都不为空,则返回真,否则返回假。
3.execute()方法,起到跳转的作用,相当于struts1种action的用途,如果isInvalid()方法返回真,则跳转到SUCCESS设置,否则跳转到INPUT设置。
4.关于SUCCESS和INPUT
当action(此处是Logon.java)处理完request时,它会返回相应的response。这个返回的结果可以是一个HTML页面,一个JSP页面,一个action或其他种种结果。多种结果可以被一个action mapping得到,关键是选择哪个返回结果的问题。一个action通常返回一个名字,此名字对应一个可能的返回结果。这些都需要在struts.xml中设置。看下面在struts.xml中的设置。
说明:
1.<action name="Logon" class="example.Logon">
此句表明所要调用的action名与相应的类的位置。
2.<result type="redirect-action">Menu</result>
此句表明默认为SUCCESS的处理结果,从type="redirect-action"可以得知,它将调用另一个名为Menu的action。
3.<result name="input">/example/Logon.jsp</result>
此句表明返回input的情况,它将跳转到Logon.jsp。
<o:p> </o:p>
至此,对Logon.java中的两个跳转设置都在struts.xml中作了交代。下面来看看Menu这个action的定义,并引出设置存根(stub)页面的方法。
3.如何设置存根(stub)页面<o:p></o:p>
Menu.jsp<o:p></o:p>
说明:
当调用Logon这个action时,如果返回SUCCESS,则会跳转到Menu这个action,我们写一个Menu.jsp可到调出相应的页面。这是一个“缺失”页面的常规页面。我们可以将它做成可重用的形式。方法如下,我们定义一个Missing.jsp,其内容就是Menu.jsp中的内容,接着,我们修改Menu.jsp。
Menu.jsp<o:p></o:p>
这样,就能加载Missing.jsp。
4.关于验证<o:p></o:p>
验证可以通过一个XML文档来描述,也可以使用注解(关于注解annotations没有介绍)。使用xml进行验证则需将相应的文件名命名为“-validation”这种形式。我们这里使用“Logon-validation”这个名字,表明我们将验证Logon这个action。
Logon-validation.xml<o:p></o:p>
说明:
1.为了表明是我们的xml验证发挥作用,我们将Logon.java中关于验证的部分注释掉。
2.<field name="username">
<field-validator type="requiredstring">
<message>Username is required</message>
</field-validator>
</field>
此段说明验证的字段是username,验证的类型为requiredstring,即为空验证,如果为空则返回message: Username is required。我们看看验证结果:
3.这里有一个问题,当我们第一次调用Logon.jsp这个页面时,我们并不需要对此进行验证。我们可以这样做,我们可以利用父类ActionSupport提供的input方法来“绕过”验证。我们做如下修改:
Welcome.jsp(文件在附录2中说明)<o:p></o:p>
<o:p> </o:p>
struts.xml<o:p></o:p>
说明:
1.在Welcome.jsp页面中点击超链接Sign On,将调用Logon_input action。
2.根据struts.xml中的设置,我们将处理这条配置(注意,参数input):
<action name="Logon_input" method="input" class="example.Logon">
3.在Logon类中将调用input方法(依据:method="input")。
4.input方法将使得验证被绕过,并返回默认结果“input”。
5.显然,input将会再次导入Logon.jsp,此时没有验证的语句出现(指“Username is required”)。原因在于这次是直接导入jsp页面,而不是经过action导入的。
<o:p> </o:p>
下面开始进行验证了。当我们点击submit,将进行如下操作。
1. 系统检查是否有针对于目标action即Logon的验证。
2. 系统发现Logon-validation这个xml文件,系统将自动创建一个验证对象来验证这个类。
3. 开始验证输入的参数。
4. 如果验证失败,它的message将加入到一个内部的队列中。
5. 当所有的验证完成,如果验证没有通过,将返回结果“input”,并且不再返回到原Action类。
6. 当所有验证完成,如果验证通过,则返回“success”。
<o:p> </o:p>
总结,我们可以使用验证机制来代替Action类中的execute()方法。
这里简单的示范一下如何使用资源文件。下面我们定义一个资源文件。
package.properties<o:p></o:p>
我们对Logon-validation.xml和Logon.jsp做一下修改。
Logon-validation.xml<o:p></o:p>
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|||||||||||||
返回顶楼 | |||||||||||||