struts2学习笔记(6)——输入校验(2)

上次做了一个简单的验证示例,但是你会发现,每次提交后,数据就没了,如果某一项输入错误会导致整个表单都得重填,这是一件非常恐怖的事。

 

 

要实现提交后数据还保留,可以使用两种方法来实现。

 

 

记住,struts2是基于请求转发的。

 

 

可以通过在表单中指定输入框的value来实现,<input type="text" name="username"

 

 

value="${requestScope.username}" />

 

 

前面已经提到,struts2是基于请求转发的,所以可以获得之前输入的数据。

 

 

第二种方法就是用struts2的标签库。

 

<s:form action="register">
    <s:textfield name="username" label="username"></s:textfield>
    <s:password name="password" label="password"></s:password>
    <s:password name="repassword" label="re-password"></s:password>
    <s:textfield name="age" label="age"></s:textfield>
    <s:textfield name="birthday" label="birthday"></s:textfield>
    <s:textfield name="graduation" label="graduation"></s:textfield>
    <s:submit value=" submit "></s:submit>
</s:form>

 

 

但是输入如下信息时,显示效果如图所示 

图片一


 

显然这种效果并不好,struts2提供了自定义主题的功能,即在标签中增加属性theme="simple"
如:

<s:textfield name="username" label="username" theme="simple" ></s:textfield>

也可以放在form标签中,那么整个表单将采用此样式,然后就可以把这些标签放在表格中。

至于错误信息可以放在action级别的error中。

即在validate方法中,将验证错误信息通过addActionError显示出来,此方法只接受一个参数,即出错的信息。

struts2默认表单中只能显示fielderror,为此,要将出错信息显示出来,必须在页面中新增加一个标签,即<s:actionerror />

可以在此增加样式。实际上现阶段学到的标签都可以加样式,CssStyle和CssClass.

通过查看源代码可以发现,

FieldError是一个map
actionError是Collection(实际上是一个arraylist)

如何在一个action封装多个业务逻辑呢?

可以在struts.xml的action中增加一个属性,method="XXX"

即会调用action的XXX方法,而不是execute方法。

既然有不同的业务逻辑(方法),那么不可能使用同一验证方法。因此要实现不同的方法的验证,即生成验证方法validateXXX(XXX第一个大写)

如,在action中增加业务逻辑Test,那么就得在struts.xml中做如下修改:
    <action name="register2" class="cn.tshining.action.RegisterAction" method="Test">
        <result name="success">/success.jsp</result>
        <result name="input">/register2.jsp</result>
    </action>

    再把jsp页面的action改为register2即可。

那么再来看看工作流程:

首先struts2拦截用户请求,然后转发到相应的action,调用validateXXX方法,然后调用validate方法,当无错时执行XXX方法。

这样以来便会调用两次验证方法,但是这样也不符合要求,要如何解决??

有两种方法:
    1.不override 父类的validate,因为父类的validate方法时什么也不做的。
    2.将validate改名,由上面得知,可以将其改成validateExecute。

如此一来,便不会调用2个验证方法了。

第2种方法实际上还是会执行父类的validate,只不过是什么也不做罢了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值