输入校验二(struts2中的输入校验,服务器端)

在struts2中有validate()方法,可以用于实现在服务器端对用户输入信息进行校验。

该方法需要类继承ActionSupport类,通过重写validate()方法实现。

struts2框架在执行Action类时,会在调用该Action类中的罗技处理方法之前,调用validate()方法。

validate()方法的父类中还有一个addFieldError()方法,可以在该方法传入fieldErrror值。放执行完validate(),进入execute()方法前,系统会检查有没有fieldError,如果有,则不执行execute()方法,而是返回一个input逻辑视图。

这个流程大致如下:




1. 在jsp的form表单如下:

<form action="login" method="POST" id="form"  >
<div class="inputText"><span>用户名: </span>
<span><s:fielderror/></span>
<input type="text" name="username" id="username" class="username"></div> 
<input type="button"   value="提交">

</form>

其中s标签<s:fielderror/>可以显示validate()返回的错误信息,也就是在validate()方法中调用其父类方法addFieldError()传递的值。


2. action文件中代码如下:

public class LoginAction extends ActionSupport implements ModelDriven<User>{
private User user=new User();
public String Login(){

……

}

public void validate() {
// TODO Auto-generated method stub
if(user.getUsername().trim()==null || "".equals(user.getUsername().trim())){
this .addFieldError("usernameError", "用户名不能为空");
}
}

在跳转该action时,先执行了validate()方法,当符合条件user.getUsername().trim()==null || "".equals(user.getUsername().trim())时,通过父类的addFieldError()方法添加一条错误信息,并通过struts.xml中的配置跳转进入处理页面。


3. 在struts.xml文件中也需要在该action下配置name="input"的内容:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
   <package name="cr.mypackage" extends="struts-default">
        <action name="login" class="com.cr.service.LoginAction"  method="Login">
            <result name="success" type="redirect">/page/ChatRoom.jsp</result>
            <result name="input">/MainPage.jsp</result> 
        </action>
        <action name="webSocket" class="com.cr.service.WebSocketDemo">           
        </action>
    </package> 
</struts>

只有配置了<result name="input">/MainPage.jsp</result> ,在action的validate()中被拦截后才会跳转到input指定的jsp页面——/MainPage.jsp。


=====================================================

上面这种调用validate()方法会对该方法所在的整个action()生效。如果想对该action中的特定方法生效而不对传入其它方法的参数进行校验,可以使用validateXxxx()。例如上例中如果仅对LoginAction类中的 Login()方法起效,则将“Xxxx”用“Login”代替。注意第一个字母需要大写。

以上文中为例,只需要将action中修改如下:

public class LoginAction extends ActionSupport implements ModelDriven<User>{
private User user=new User();
public String Login(){

……

}

public void validateLogin() {
// TODO Auto-generated method stub
if(user.getUsername().trim()==null || "".equals(user.getUsername().trim())){
this .addFieldError("usernameError", "用户名不能为空");
}
}

struts.xml和MainPage.jsp中代码无需做改动。即可实现仅针对LoginAction类中Login()方法的输入校验。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值