Struts2_action_validate_simpleTest

昨晚很晚才完成了struts2.0简单数据验证,没时间写到博客里就已经累的不行了!今天过来又练习了一遍,发现自己还是基本掌握了(只是皮毛中的皮毛)!

注意:在查看webwork技术文档时发现其中一句话是这样写的,在action类中如果没有属性getter方法,则:在验证失败之后(或者直接是addFieldError()返回的错误),在用户输入页面无法得到刚才的值,这是很不友好的方式,不可能因为用户一个输入框的数据不规范,就清除了用户所有的数据!所以,一定要保留getter方法。(不过,password类型的文本框就是多给一个getter也不可能有值的!开玩笑 :D )
直接代码说话了,以下是控制器action的代码:

import com.opensymphony.xwork2.ActionSupport;

public class UserCaseAction extends ActionSupport
{

private static final long serialVersionUID = 1L;

private String userName;

private String password;

public String getUserName()
{
return userName;
}

public void setUserName(String userName)
{
this.userName = userName;
}

public String getPassword()
{
return password;
}

public void setPassword(String password)
{
this.password = password;
}

public UserCaseAction(String userName, String password)
{
super();
this.userName = userName;
this.password = password;
}

public UserCaseAction()
{
super();
}

public String login()
{
//依照网上的做法,让线程休眠500毫秒,然后查看timer拦截器在控制台的输出结果
try
{
Thread.sleep(500);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
if ("Harry".equals(this.getUserName().trim())
&& "Harry".equals(this.getPassword().trim()))
{
//注意:此处的result在转发到的页面中可以访问其值!
this.addFieldError("userName", "Login success ! !");
return "input";
}
else
{
this.addFieldError("userName", "Login failure");
return "input";
}
}

@Override
/**
* 验证数据的方法--已重写
*/
public void validate()
{
if (null == this.getUserName()
|| "".equals(this.getUserName().trim()))
{
this.addFieldError("userName",
"Username is required ! !");
}
if (null == this.getPassword()
|| "".equals(this.getPassword().trim()))
{
this.addFieldError("password",
"Password is required ! !");
}
}

}


----配置文件大同小异,不需要贴出来了,否则高手要喷饭了!

JSP页面代码:

<s:form action="userCase">
<s:textfield name="userName" label="UserName"></s:textfield>
<s:password name="password" label="Password"></s:password>
<s:submit value="Login" method="login"></s:submit>
</s:form>



OK,到此为止就基本上可以用了,当我访问时,会出现附件中的页面,经过几番捣乱,就可以体会到validate的作用了!


注意:在初次使用struts2标签时,发现访问以上的JSP页面,居然会给我报出一个action未找到%$#@?*&^的异常,异常信息具体是:

The Struts dispatcher cannot be found.
This is usually caused by using Struts tags without the associated filter.
Struts tags are only usable when the request has passed through its servlet filter,
which initializes the Struts dispatcher needed for this tag.
- [unknown location]

郁闷至极,终于发现:原来是自己在web.xml文件中关于struts2框架的filter配置中有问题,直接访问JSP页面,无法经过该filter中的url-pattern,所以,需要重新修改一下web.xml文件中的内容。

<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>


以上就这些了!!!


另外,再啰嗦几句,当我的Action中不是只有一个乖巧的唯一的宝贝execute方法,而是有很多山寨自定义方法时,如何调用呢?
在JSP页面中,表单提交地址可以写成

<form action="userCase!login.action" method="post">

但是在struts标签使用之后,需要按照这样的方式:

<s:form action="userCase">
<s:submit value="Login" method="login"/>
</s:form>



。。。。修炼内功。。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值