2013-10-23 74 views
2

在JSP中迭代List對象,其值來自ViewAction類,它顯示的是正確的。獲取從jsp到動作類的列表對象值

下面是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到動作 類以便執行更新的操作。但是這個列表(beanList) 的值在操作類中是無效的。既然它是無效的,我不能做更新 操作。 1)在新的動作類(EditAction.java)中如何初始化列表對象(beanList)? 這與我在ViewAction.java中聲明的方式相同 2)Jsp sysntax是否正確? 請求你幫忙。提前致謝。

回答

3

添加默認的無參數的構造函數Bean類。

默認的無參數的構造叫一樣,因爲它是默認的:如果你不指定任何構造函數,它會自動創建。

相反,如果您指定的另一個構造函數,例如一個與像您的參數,無參數的構造不會自動創建了,你,如果你需要它明確聲明它。

Struts2需要no-args構造函數來創建你的bean。

例如,您可以使用一個構造函數接受10個參數的bean,並且只在JSP頁面中指定其中的一個:Struts必須能夠創建對象並設置單個字段(通過Setter),而不需要關心關於九個缺失的參數。

+0

非常感謝它工作正常:)爲什麼Bean類中不需要參數構造函數?請幫助我。 – Prakash

+1

如果它有效,你應該upvote並接受答案。順便說一句,我現在編輯,讓你知道發生了什麼 –

+1

嘿,很好的捕獲。甚至沒有看到OP中的Bean類。 –

1

你必須使用類型轉換,在ViewCheckboxAction-conversion.properties文件提供以下配置:

KeyProperty_beanList=rollnumber 
Element_beanList=Bean 
CreateIfNull_beanList=true 

當通過表單提交這一點,rollnumber用作KeyProperty在beanList bean實例。您可以使用Key Property字段的任何其他屬性。 名稱的值將被設置爲具有此特殊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

+0

看不到使用類型轉換的一點。 –