读书人

透过实例学习Struts2 (2)

发布时间: 2013-10-08 17:02:59 作者: rapoo

通过实例学习Struts2 (2)

接上一篇 《通过实例学习Struts2 (1) 》

在Action中支持通配符

在example.xml 中,我们能看到这样的定义:

<action name="Login_*" method="{1}" class="example.Login">
<result name="input">/example/Login.jsp</result>
<result type="redirectAction">Menu</result>

</action>

大胆的猜测一下,这个定义应该支持Login_execute, Login_test 等Action名称, 而method="{1}" 中的{1} 应该是 第一个通配符的值, 例如execute, test,

也就是说要执行java 类Login 中的execute,input方法。

实验一下:http://localhost:8080/struts2-blank/example/Login_excute, 注意namespace 是/example

果然登录界面出现了:

透过实例学习Struts2 (2)


再尝试一下http://localhost:8080/struts2-blank/example/Login_test , 报错了:

Exception:

java.lang.NoSuchMethodException: example.Login.test()

Stack trace:

        java.lang.NoSuchMethodException: example.Login.test()at java.lang.Class.throwNoSuchMethodException(Class.java:286)at java.lang.Class.getMethod(Class.java:845)at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.getActionMethod(AnnotationValidationInterceptor.java:75)at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:47)at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)

还记得之前定义Global error page 吗, 很明显上面的界面是由error.jsp 渲染出来的,使用struts2提供的tag library ,很方便

public void validate(){    if(!"andy".equals(getUsername())){    addFieldError("username",getText("user.incorrect"));    }    if(!"pass4andy".equals(getPassword())){    addFieldError("password",getText("password.incorrect"));    }    }

当然要记得在package.properties 新添加两个message

user.incorrect=User name is not correct

password.incorrect=Password is not correct

试着登陆一下,你就会发现我们的validate开始工作了,是不是很easy ?


今天到此为止,明天来看看国际化怎么做



读书人网 >编程

热点推荐