1

在此处输入图像描述

我希望在我的 JSP 页面上显示项目列表,每个项目都有一个空白文本字段来填写金额,一旦我填写了所需的项目金额,我将提交。

我有ExampleAction如下课程,其中我有 populate() 方法,我首先触发该方法以便填充项目。我开火网址:

http://localhost:8084/WebExample/populate.action.

同样ExampleAction已经执行 mtd,我从 JSP 页面调用 SUBMIT 按钮操作。但我的问题在于执行方法,我无法获取列表中的对象,即 exList。这是因为动作类的一个实例只与一个请求相关联吗?当我通过 SUBMIT 按钮触发另一个动作时,是否关联了不同的值堆栈?如果是,对我来说,在执行()方法中检索输入的那些金额(在 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 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>
4

2 回答 2

1

要将值提交给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 它应该是公共类而不是内部类。必须设置浮点值检查您是否没有转换错误。

于 2014-05-23T12:21:23.503 回答
0

action="ex"从中删除

<s:submit  action="ex" value="SUBMIT"/>

因为在提交点击表单动作调用。无需action="ex"提交提交按钮。

关闭</package>标签。

于 2014-05-23T11:37:04.083 回答