gpt4 book ai didi

java - Struts2:列表被超出其范围访问

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:58 25 4
gpt4 key购买 nike

我有一个 struts2 Action 类,看起来像这样:

//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() 中声明的国家/地区列表,理想情况下它不应该打印任何内容,因为该方法从未被访问过,国家/地区列表也不是操作类属性的一部分(因此,在值堆栈中创建 Product 类型的对象时,它不应该有国家/地区)。

但是它确实会打印澳大利亚(列表的索引值)以及其他表单属性。这是如何/为何发生的?

最佳答案

当您在中写入国家

countries[0]

它调用getCountries()方法。现在,您已将 [0] 放在其旁边,并将 countries 作为列表...

翻译成

getCountries().get(0)

您可以通过在 getCountries() 方法中放置 sysout 来验证这一点。

关于java - Struts2:列表被超出其范围访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12084773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com