2010-01-09 42 views
2

我们正在使用struts 2.0.14并面临问题,从JSP向动作类设置了索引属性。设置从JSP到动作类的索引属性的问题

代码看起来与此类似。

public class MyExample extends ActionSupport 
     { 

      private List<Person> persons; 
      private List<String> names; 

      public String execute() 
      { 
       //persons = myDAO.readPersons(names); 
       return SUCCESS; 
      } 

      public String update() 
      { 
       for (Person p : persons) 
       { 
        System.out.println(p.getName() + "---" + p.getAddress().getStreet()); 
       } 
       return SUCCESS; 
      } 

      // Getters and setters  
     } 

     class Person 
     { 
      private Address address; 
      private String name; 
      // Getters and setters  
     } 

     class Address 
     { 
      private String street; 
      private String number; 
      // Getters and setters  
     } 

    And JSP: 
     <%@ taglib prefix="s" uri="/struts-tags"%> 
     <%@ page language="java" pageEncoding="ISO-8859-1"%> 
     <!---- Other code ----> 
     <s:ieterate value="persons" status="status"> 
     <tr> 
      <s:textfield name="person['%{#status.index}'].name"/> 
      <s:textfield name="person['%{#status.index}'].address.number"/> 
      <s:textfield name="person['%{#status.index}'].street"/> 
     </tr> 

我可以成功地在页面上显示值,但是当我提交表单时,值没有被填充。 我检查了萤火虫,看看这些参数是如何发布的,它们就像人['0']。name,person ['0']。address.number等等,请让我知道错误在哪里。

回答

2

您是否尝试了'%{#status.index}周围?

像这样:

<s:textfield name="person[%{#status.index}].name"/> 
2

除了去除围绕指数的报价为内特建议,我注意到,你的字段命名为persons但您的参数使用person来代替。假设这是一个错字,它应该是,例如,persons[%{#status.index}].name,确保:

  1. 你的操作有一个setPersons(List<Person> person),以便它可以创建一个新的列表和设置。
  2. PersonAddress没有参数构造函数,因此它们可以自动创建。

如果仍然没有工作,尝试添加@Elementcom.opensymphony.xwork2.util.Element)到persons给它一个什么类型的对象与填充它提示:可能是发生

@Element(value=Person) 
List<Person> persons; 

一件事是您的行动的超类之一可能实现ParameterNameAware,它按名称过滤出参数。一个快速的方法来检查是重写acceptableParameterName在你的行动,看看它是否使得它的工作:

@Override 
public boolean acceptableParameterName(String name) { 
    return true; 
} 

见ParametersInterceptor API文档了解详情:http://struts.apache.org/2.0.14/struts2-core/apidocs/com/opensymphony/xwork2/interceptor/ParametersInterceptor.html