java - 从execute()方法中的列表中检索值

标签 java jsp struts2 ognl valuestack

enter image description here

我希望显示项目列表,每个项目都有一个空白文本字段来填充我的 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/

相关文章:

java - Eclipse - @Deprecated 警告隐藏弹出的 java 文档

java - 如何将字符串 Mac 地址转换为字节数组

Java UTF8 编码

java - org.apache.jasper.JasperException : javax. servlet.ServletException : javax. servlet.jsp.JspException:无法在名称airline_name下找到bean

java - jSTL 可以检查属性是否已添加到模型中吗?

java - Struts JSP/html 插入当前日期

spring - Struts2中如何获取登录用户的用户名?

java - Mysql连接线程是否安全

jsp - Struts Tiles - 获取属性

jquery - 基于另一个下拉列填充struts2 jQuery网格下拉列