Struts2动态方法调用小疑点
Struts2动态方法调用小问题
今天,在用Struts2中Action接收参数时,在URL中输入:http://localhost:8080/Struts2_03/user/user!add,出错:
There is no Action mapped for namespace [/user] and action name [user!add] associated with context path [/Struts2_03].struts.xml配置为:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="font" namespace="/user" extends="struts-default"> <action name="user" class="com.zhang.HelloAction"> <result > /Studentadd_success.jsp </result> </action> </package> </struts>HelloAction.java:
package com.zhang; import com.opensymphony.xwork2.ActionSupport; public class HelloAction extends ActionSupport { private String name; private int age; public String add() { System.out.println("name="+name); System.out.println("age+"+age); return SUCCESS; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
找来找去,原来是动态方法调用(DMI)这方面出了问题;
原因:struts2中默认不允许使用DMI;
所以:需要在配置文件中将这句加上: <constant name="struts.enable.DynamicMethodInvocation" value="true"/> 这样大家在地址栏动态输入就可以得到预期的页面;
这个属性是设置Struts2是否支持动态方法调用,为true时是支持,为false时是关闭动态方法调用!
配置后的struts.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <constant name="struts.devMode" value="true" /> <package name="font" namespace="/user" extends="struts-default"> <action name="user" class="com.zhang.HelloAction"> <result > /Studentadd_success.jsp </result> </action> </package> </struts>