我希望显示项目列表,每个项目都有一个空白文本字段来填充我的 JSP 页面上的金额,一旦我填写了所需的项目金额,我就会提交。
我有如下的 ExampleAction
类,其中有 populate() 方法,我首先触发该方法以便填充项目。我触发网址:
http://localhost:8084/WebExample/populate.action.
相同的ExampleAction
已执行mtd,我在JSP页面的SUBMIT按钮操作上调用它。但我的问题是在执行方法中,我无法获取列表中的对象,即 exList。
这是因为操作类的实例仅与一个请求关联吗?当我通过“提交”按钮触发另一个操作时,是否有不同的关联值堆栈?如果是,那么我检索在execute()方法中输入的金额(在JSP中)以在Tomcat控制台中打印的最佳方法是什么?
示例操作:
private ArrayList<EX> exList;
private EX ex;
public ExampleAction(){
exList = new ArrayList<EX>();
}
//Getters And Setters.
@Override
public String execute() throws Exception {
for (EX ex1 : exList) {
System.out.println("ex1 = " + ex1.getName());
}
return SUCCESS;
}
public String populate() throws Exception{
System.out.println("in populate");
exList.add(new EX("Item 1",0.0f));
exList.add(new EX("Item 2",0.0f));
![enter image description here][2]...
...
return SUCCESS;
}
EX.class:
class EX {
private String name;
private float amt;
public EX(String name, float amt) {
this.name = name;
this.amt = amt;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getAmt() {
return amt;
}
public void setAmt(float amt) {
this.amt = amt;
}}
示例.jsp:
<form action="ex">
<div style="overflow: auto;height: 200px;width: 400px; border: black solid;border-style: double;">
<table border="1">
<tr>
<td>Name</td>
<td>Amt</td>
</tr>
<s:iterator value="exList" var="ex">
<tr>
<td><s:property value="name"/></td>
<td><s:textfield cssClass="num" onchange="calculateSum()"/></td>
</tr>
</s:iterator>
</table>
</div>
<br>
Sum : <s:textfield cssClass="ssum" disabled="true"/>
<br>
<s:submit action="ex" value="SUBMIT"/>
</form>
Struts.xml:
<package name="default" extends="struts-default" namespace="/">
<action name="populate" class="com.ex.register.ExampleAction" method="populate">
<result name="success">/register/example.jsp</result>
</action>
<action name="ex" class="com.ex.register.ExampleAction" method="execute">
<result name="success">/register/example.jsp</result>
</action> </package></struts>
最佳答案
要将值提交到ArrayList
,您可以使用索引属性名称。例如
<s:iterator value="exList" var="ex" status="status">
<tr>
<td><s:property value="name"/></td>
<td><s:textfield cssClass="num" name="exList[%{status.index}].name" onchange="calculateSum()"/></td>
</tr>
</s:iterator>
您还应该为 bean Ex
提供转换配置。假设属性 name
位于 bean 内部。
@Element(value = Ex.class)
@Key(value = String.class)
@KeyProperty(value = "name")
@CreateIfNull(value = true)
private ArrayList<EX> exList;
请注意,您可以省略一些注释,因为可能未使用键或默认使用值,但在所有情况下都是可配置的。有关此转换技术的更多信息,您可以在文档 Advanced Type Conversion 中找到.
编辑:
还有一件事 EX != Ex 并且它应该是公共(public)类而不是内部类。必须设置浮点值以检查是否存在转换错误。
关于java - 从execute()方法中的列表中检索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23827729/