我有一个struts2动作类,看起来像这样:
//import relevant packages
public class Product implements SessionAware, ServletRequestAware,
ServletResponseAware, ServletContextAware {
private String productName;
private String description;
private String price;
private ServletContext servletContext;
private HttpServletRequest servletRequest;
private HttpServletResponse servletResponse;
private Map sessionMap;
//getters and setters here
public void setServletRequest(HttpServletRequest servletRequest) {
this.servletRequest = servletRequest;
}
public void setSession(Map map) {
this.sessionMap = map;
}
public void setServletResponse(HttpServletResponse servletResponse) {
this.servletResponse = servletResponse;
}
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
public String execute() {
// do something here
return "success";
}
public List<String> getCountries() {
List<String> countries = new ArrayList<String>();
countries.add("Australia");
countries.add("Fiji");
countries.add("New Zealand");
countries.add("Vanuatu");
return countries;
}
}
sruts.xml具有以下内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="package.name" namespace="/" extends="struts-default">
<action name="Product_input">
<result>/jsp/Product.jsp</result>
</action>
<action name="Product_save" class="package.name.Product" method="execute">
<result>/jsp/Details.jsp</result>
</action>
</package>
</struts>
Product.jsp包含一个简单的形式:
<s:form action="Product_save">
<s:textfield label="Product Name" key="productName"/>
<s:textfield label="Description" key="description"/>
<s:textfield label="Price" key="price"/>
<s:submit/>
</s:form>
Details.jsp显示在表单中输入的内容:
<h5>Details:</h5>
Product Name:
<s:property value="productName" />
<br /> Description:
<s:property value="description" />
<br /> Price: $
<s:property value="price" /> </br>
<s:property value="countries[0]" /> </br>
Details.jsp中的最后一行尝试访问动作类中getCountries()中声明的国家/地区列表,理想情况下它不应该打印任何内容,因为从不访问该方法,也不是国家/地区列表是动作类属性的一部分(因此,在Value堆栈中创建Product类型的对象时,它不应该有国家/地区。
但是它会打印澳大利亚(列表的索引值)以及其他表单属性。怎么/为什么会这样?
答案 0 :(得分:1)
在
中写下countries
时
countries[0]
它需要getCountries()
方法。现在,您已将[0]
放在旁边,countries
作为列表......
它转换为
getCountries().get(0)
您可以在sysout
方法中添加getCountries()
来验证相同内容。
答案 1 :(得分:0)
在struts中,我们使用“property”属性来访问bean的值,当我们使用property属性时,会调用它的getter方法,因此在上面的代码中调用了getCountries()方法。