Action Mappings Action映射可以指定一组result类型,一组异常处理,一个拦截器堆。但是只有name属性是必须的。其他的属性都可以通过package范围提供。
一个登录action
<action name="Logon" class="tutorial.Logon">
<result type="redirect-action">Menu</result>
<result name="input">/tutorial/Logon.jsp</result>
</action>
Action Names 在web应用中,name属性是用以匹配浏览器请求路径的一部分(或其他HTTP客户端)。framework会丢掉主机名、应用名和扩展名,并匹配中间部分。所以,一个
http://www.planetstruts.org/struts2-mailreader/Welcome.do 会map到
Welcome action。
在应用中,这个到action的链接一般是由struts tag来自动产生的。这个tag通过名字来指定action,并且这个framework会加上默认扩展名和其他一些必须 的东西。
<s:form action="Hello">
<s:textfield label="Please enter your name" name="name"/>
<s:submit/>
</s:form>
Wildcard Method 多数情况,一组action mapping会有一个共享模式。比如,你所有的 edit actions都一个“edit”打头, 并调用这个action 类的edit方法。delete actions也是这个模式,但是调用的是delete方法。
这种情况,你就可以通过通配符的方式来定义一次action mapping,远胜于定义每一个action mapping.
<action name="*Crud" class="example.Crud" method="{1}">
这里,一个"editCrud"的action会调用Crud Action类实例的edit方法。同样,一个"deleteCrud"的action会调用delete方法。
另一种常用的方法就是后缀方法名,通过设置"!", "_", 或者其他一些特殊字符。
- "action=Crud_input"
- "action=Crud_delete"
To use a postfix wildcard, just move the asterisk and add an underscore.
<action name="Crud_*" class="example.Crud" method="{1}">