获取从jsp到action类的List对象值

时间:2013-10-23 20:48:38

标签: java jsp struts2

在JSP中迭代List对象,其值来自正在显示的ViewAction类。

以下是jps代码。

<s:iterator value="beanList" status="stat">
    <tr> 
         <td>    
             <input type="checkbox" name="subCheckBox" />
         </td>   
         <td>                 
             <s:textfield name="beanList[%{#stat.index}].rollnumber" 
                          value="%{rollnumber}" theme="simple"/>
         </td>
         <td>
             <s:textfield name="beanList[%{#stat.index}].name" 
                          value="%{name}" theme="simple"/>
         </td>
         <td>
             <s:textfield name="beanList[%{#stat.index}].location" 
                          value="%{location}" theme="simple"/>
         </td> 
    </tr>     
</s:iterator>

ViewAction.java和Bean类代码如下

在动作类列表中,对象名称为 beanList

public class ViewCheckboxAction extends ActionSupport  {
    HttpServletRequest request = ServletActionContext.getRequest();
    String viewData = "select * from student order by rollno";
    List<Bean> beanList;

    public List<Bean> getBeanList() {
        return beanList;
    }  

    public void setBeanList(ArrayList<Bean> beanList) {
        this.beanList = beanList;
    }

    public String execute() {
        beanList = new ArrayList<Bean>();
        DbConnection db = new DbConnection();
        int counter = 0;
        try {
            Statement st = db.getConnection().createStatement();
            ResultSet res = st.executeQuery(viewData);
            while(res.next()) {
                  counter++;
                  Bean bean = new Bean(res.getInt(1),
                                       res.getString(2),
                                       res.getString(3));
                  rollNumber.add(res.getString("rollno"));
                  beanList.add(bean);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try { 
                db.removeConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(counter>0)
           return SUCCESS;
        else 
           return ERROR;
    }   
}

豆:

public class Bean {
    int rollnumber;
    String name;
    String location;

    public Bean(int x, String y, String z) {
        rollnumber = x;
        name = y;
        location = z;
    }

    getters and setters...

我需要从jsp到action的多个/单个更新表单字段值 class 以便进行更新操作。但是列表(beanList) 值在操作类中无效。由于它无效,我无法进行更新 操作。 1)在新的动作类(EditAction.java)中如何初始化列表对象( beanList )? 它与我在ViewAction.java中声明的方式相同 2)Jsp sysntax是否合适? 请求您提供帮助。提前谢谢。

2 个答案:

答案 0 :(得分:3)

Bean班级中添加默认无法构建器

默认no-args构造函数被调用,因为它是默认值:如果你没有指定 任何 构造函数,它是自动创建的。

如果你指定另一个构造函数,例如一个带有像你这样的参数的构造函数,则不再自动创建no-args构造函数,并且 来明确声明它如果你需要它。

Struts2需要使用no-args构造函数来创建bean。

例如,您可以使用带有构造函数的bean获取10个参数,并在JSP页面中仅指定其中一个:Struts必须能够创建对象并设置单个字段(通过Setter)而不关心九个缺失的参数。

答案 1 :(得分:1)

您必须使用类型转换,在ViewCheckboxAction-conversion.properties文件中提供以下配置:

KeyProperty_beanList=rollnumber
Element_beanList=Bean
CreateIfNull_beanList=true 

通过表单提交时,rollnumber用作beanList中Bean实例的KeyProperty。您可以使用Key Property字段的任何其他属性。 name的值将设置为具有此特殊ID的MyBean实例。 列表没有为不可用的id值添加空值。这种方法避免了OutOfMemoryErrors的风险!

<s:iterator value="beanList" id="bean">
    <tr> 
        <td>    
             <input type="checkbox" name="subCheckBox" />
        </td>   
        <td>                 
             <s:textfield name="beanList(%{bean.rollnumber}).rollnumber" value="%{rollnumber}" theme="simple"/>
        </td>
        <td>
            <s:textfield name="beanList(%{bean.rollnumber}).name" value="%{name}" theme="simple"/>
         </td>
         <td>
             <s:textfield name="beanList(%{bean.rollnumber}).location" value="%{location}" theme="simple"/>
          </td> 
   </tr>     
</s:iterator>

参考:http://struts.apache.org/release/2.0.x/docs/type-conversion.html