struts2的自定义方法与输入校验

1.struts2的每个action都将继承ActionSupport这个类,从而重写execute这个方法。现在我们希望struts2自动执行我们自己的方法,目的是为了一个action中可以处理多个请求。

方式如下:

struts2.xml:

<action name="login" class="com.erzong.struts2.LoginAction" method="myExecute">

<result name="success">/result.jsp</result>

</action>

LoginSupport类:

    public String myExecute() throws Exception

     {

return SUCCESS;

    }

一般公司不使用这种方法,因为在实际开发中,因为多个请求可能接收不同的参数,而如果把多个处理请求定义在同一个action中,有可能造成代码混乱。

2.模拟注册流程验证注册信息的正确性,如果错误信息则回填前面页面。

register.jsp页面:


RegisterAciton:(继承了ActionSupport类,而ActionSupport类实现了验证的接口。里面有个空实现的validate方法用于验证,而validate是前于execute执行)

public class RegisterAction extends ActionSupport

{

private String username;

private String password;

private String repassword;

private int age;

private Date birthday;

private Date graduation;

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 String getRepassword()

{

return repassword;

}

public void setRepassword(String repassword)

{

this.repassword = repassword;

}

public int getAge()

{

return age;

}

public void setAge(int age)

{

this.age = age;

}

public Date getBirthday()

{

return birthday;

}

public void setBirthday(Date birthday)

{

this.birthday = birthday;

}

public Date getGraduation()

{

return graduation;

}

public void setGraduation(Date graduation)

{

this.graduation = graduation;

}

@Override

public String execute() throws Exception

{

return SUCCESS;

}

@Override

public void validate()

{

if (null == username || username.length() < 4 || username.length() > 6)

{

this.addActionError("username invalid");//使用struts标签库actionerror对错误信息进行输出

this.addFieldError("username""username invalid in field");////使用struts标签库fielderror对错误信息进行输出

}

if (null == password || password.length() < 4 || password.length() > 6)

{

this.addActionError("password invalid");

else if (null == repassword || repassword.length() < 4

|| repassword.length() > 6)

{

this.addActionError("repassword invalid");

else if (!password.equals(repassword))

{

this.addActionError("the passwords not the same");

}

if (age < 10 || age > 50)

{

this.addActionError("age invalid");

}

if (null == birthday)

{

this.addActionError("birthday invalid");

}

if (null == graduation)

{

this.addActionError("graduation invalid");

}

if (null != birthday && null != graduation)

{

Calendar c1 = Calendar.getInstance();

c1.setTime(birthday);

Calendar c2 = Calendar.getInstance();

c2.setTime(graduation);

if (!c1.before(c2))

{

this.addActionError("birthday should be before graduation");

}

}

// this.getFieldErrors().clear();

// this.getActionErrors().clear();

this.clearActionErrors();

this.clearFieldErrors();

System.out.println("invoked!!!");

}

}

struts.xml:如果输入不符合规范,则进入validate方法中的不合法情况下,这时需要定义返回页面,否则会出现如下页面


这时得在struts.xml中加入相应的结果映射

<action name="register" class="com.erzong.struts2.RegisterAction">

<result name="success">/registerResult.jsp</result>

<result name="input">/register.jsp</result>

</action>

register.jsp页面:要让回去的页面显示错误提示信息,加上<s:actionerror/>

运行结果(不正确填写)为:


3.当我们不仅仅要显示注册信息,而且需要显示我们已填写的错误信息,则需要struts的taglib来实现,使用方法还是和html元素类似,只是struts提供了更好的封装

register.jsp(改进版):

有的人不喜欢struts提供的样式,觉得不灵活,这时可以加上

4.综合Struts的类型转换和输入校验的例子,我们可以得出


5.addActionError和addFildError实现方式是创建一个集合,将错误一个个add进去,所以也可以调用clear将里面的错误将里面的错误清空

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭