在Struts 2

时间:2016-03-25 09:07:45

标签: java jsp struts2 ognl

我正在研究Struts2 Web应用程序,目前我遇到了表单绑定问题。从jsp到action类的绑定不起作用。

方案是我有一个从上一个操作设置的列表。在当前的jsp中,我在列表上进行迭代并在jsp中打印表中的值。由于要求,我应该使字段可编辑,以便用户可以编辑显示的值并将更新的值提交给下一个操作。

问题是我从jsp编辑的值没有绑定到action类中的列表。我尝试了多种方法,但直到现在还没有运气。以下是我尝试的方式。

我尝试过的第一种方法是不受约束:

<s:iterator value="list1" var="sVO" status="rowStatus">
    <tr onclick="SelIndex('<s:property value="itm_id"/>');">
        <td><s:property value="itm_id"/></td>
        <td><s:date name="proc_d" format="MM/dd/YYYY"/></td>
        <td><span style="display:none;"><s:property value="pln_n_n"/></span><input type="text" size = "8" value="<s:property value="pln_n_n"/>"/></td>
        <td><span style="display:none;"><s:date name="trd_d" format="MM/dd/YYYY"/></span><input type="text" size = "8" class="dateFilter" value="<s:date name="trd_d" format="MM/dd/YYYY"/>"/></td>
        <td><s:select theme="simple" name="list1[%{rowStatus.index}].vari_ty" id="tranType" list="liTTypes" headerKey="None" value="vari_ty" listKey="key1" listValue="value1" /></td>
        <td><span style="display:none;"><s:property value="description"/></span><input type="text" size = "8" value="<s:property value="description"/>"/></td>
        <td><s:property value="getText('format.money',{quantity})"/></td>
        <td><span style="display:none;"><s:property value="getText('format.money',{price})"/></span><input type="text" size = "10"  value="<s:property value="getText('format.money',{price})"/>"/></td>
    </tr>
</s:iterator

第二种方式我尝试了不受约束的价值观:

<s:iterator value="list1" var="sVO" status="rowStatus">
    <tr onclick="SelIndex('<s:property value="itm_id"/>');">
        <td><s:property value="itm_id"/></td>
        <td><s:date name="proc_d" format="MM/dd/YYYY"/></td>
        <td><span style="display:none;"><s:property value="pln_n_n"/></span>
            <input type="text" name="list1[%{#rowStatus.index}].pln_n_n" value="<s:property value="pln_n_n"/>"/></td>
        <td><span style="display:none;"><s:date name="trd_d" format="MM/dd/YYYY"/></span>
            <input type="text" size = "8" name="list1[%{#rowStatus.index}].trd_d" class="dateFilter" value="<s:date name="trd_d" format="MM/dd/YYYY"/>"/></td>
        <td><s:select theme="simple" name="list1[%{rowStatus.index}].vari_ty" id="tranType" list="liTTypes" headerKey="None" value="vari_ty" listKey="key1" listValue="value1" /></td>
        <td><span style="display:none;"><s:property value="description"/></span>
            <input type="text" name="list1[%{#rowStatus.index}].description" size = "8" value="<s:property value="description"/>"/></td>
        <td><s:property value="getText('format.money',{quantity})"/></td>
        <td><span style="display:none;"><s:property value="getText('format.money',{price})"/></span>
            <input type="text" name="list1[%{#rowStatus.index}].price" size = "10"  value="<s:property value="getText('format.money',{price})"/>"/></td>
    </tr>
</s:iterator>

以下是我拥有的动作类

 public class testAction extends BaseAction 
    {

private List<ProcessVO> list1 = null;
   // getters and setters for list1 


   public String ListPage() throws AppException
     {
        String strReturn = "SUCCESS";           
    // This the method from which the list1 is populated   }

   public String ListPageSave() throws AppException
    {
        String strReturn = "SUCCESS";

    // This the method where i need the updated values from list1
    // values are not getting bound when this method is called from the page which is having Iterator tag,
     }

}

  BaseAction:

   public class BaseAction extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware, ServletContextAware {

/**
 * 
 */
private static final long serialVersionUID = 1L;

/**
 * HTTP Request object.

} ProcessVO包含每个属性的属性和getter以及setter。

任何人都可以告诉我这里的问题是什么。我正在使用需要更新的相同list1对象。任何帮助对我都非常有用,因为我遇到了这个问题。

1 个答案:

答案 0 :(得分:2)

<input type = "text" 
       name = "list1[%{#rowStatus.index}].pln_n_n" 
      value = "<s:property value="pln_n_n"/>"/>

如果您使用HTML标签,OGNL将无法在其中工作。

您需要使用<s:property/>

<input type = "text" 
       name = "list1[<s:property value="%{#rowStatus.index}"/>].pln_n_n" 
      value = "<s:property value="pln_n_n"/>"/>

或使用Struts2标签,其中OGNL起作用:

<s:textfield name = "list1[%{#rowStatus.index}].pln_n_n"
            value = "pln_n_n" />

附注:

    如果 value不同,
  1. name则不需要
  2. "SUCCESS"违反惯例,应为"success"(由SUCCESS常量映射)