Wildcard:通配符
使用通配符将配置量降到最低,一定要遵守约定优于配置的原则
操作:
写两个Action:
(1)StudentAction:
package wildcard.action;
import com.opensymphony.xwork2.ActionSupport;
public class StudentAction extends ActionSupport {
public String add() {
return "success";
}
public String delete() {
return "success";
}
}
(2)TeacherAction:
package wildcard.action;
import com.opensymphony.xwork2.ActionSupport;
public class TeacherAction extends ActionSupport {
public String add()
{
return "success";
}
public String delete()
{
return "success";
}
}
struts.xml配置:
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<package name="front" namespace="/front" extends="struts-default">
<action name="student*" class="wildcard.action.StudentAction"
method="{1}">
<result name="success_{1}">
/Student{1}_success.jsp
</result>
</action>
<action name="*_*" class="wildcard.action.{1}Action" method="{2}">
<result >
/{1}_{2}_success.jsp
</result>
</action>
运行:
运行时依旧namespace后面加上action的name属性,第一个*找到Action,第二个*找到方法,两个*找到对应的jsp页面。
注意:
如果action的return返回字符串修改了,不是默认的"success",一定要在result标签的添加name属性,通配符表示一致。
ex:
package wildcard.action;
import com.opensymphony.xwork2.ActionSupport;
public class StudentAction extends ActionSupport {
public String add() {
return "success_add";
}
public String delete() {
return "success_delete";
}
}
xml里, 修改为:
<action name="student*" class="wildcard.action.StudentAction"
method="{1}" >
<result name="success_{1}">
/Student{1}_success.jsp
</result>
</action>