2013-07-06 21 views
1

我有一個評分矢量作爲我的作業類的屬性。將編輯框控件綁定到託管bean中的特定Vector元素?

我在xpage上有一個編輯框,我想編輯該值並將其寫回管理bean中的Vector。編輯框的值綁定爲: <xp:this.value><![CDATA[#{rpt.scores[rowIndex]}]]></xp:this.value>其中rpt是來自我的bean的Assignment對象。編輯框處於重複控制之中,因爲我不知道每次有多少學生將參加測試。所以我使用重複控制的rowIndex來標識我想要綁定的分數向量的哪個元素。

它正確地從Scores Vector中讀取值,但我似乎無法更改該值並將其寫回到Vector中。

如何獲取它以將值寫回到Assignment類的Scores [n]元素中?

這裏是從我的豆的分配類:

package com.logickey.gradebook; 

import java.io.Serializable; 
import java.util.Vector; 


public class Assignment implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -1500382996574385949L; 
    private String Name; 
    private String Teacher; 
    private String AssignNum; 
    private String AssignDate; 
    private Vector<String> Scores; 

    public Assignment() { 
     Name = ""; 
     Teacher = ""; 
     AssignNum = ""; 
     AssignDate = ""; 
     Scores = new Vector<String>(); 
    } 
    public Assignment(String name, String teacher, String assignNum, String assignDate, Vector<String> scores){ 
     Name = name; 
     Teacher = teacher; 
     AssignNum = assignNum; 
     AssignDate = assignDate; 
     Scores = scores; 
    } 


    public String getName() { 
     return Name; 
    } 

    public void setName(String name) { 
     Name = name; 
    } 

    public String getTeacher() { 
     return Teacher; 
    } 

    public void setTeacher(String teacher) { 
     Teacher = teacher; 
    } 

    public String getAssignNum() { 
     return AssignNum; 
    } 

    public void setAssignNum(String assignNum) { 
     AssignNum = assignNum; 
    } 

    public String getAssignDate() { 
     return AssignDate; 
    } 

    public void setAssignDate(String assignDate) { 
     AssignDate = assignDate; 
    } 


    public Vector<String> getScores() { 
     return Scores; 
    } 

    public void addScore(String input) { 
     if (Scores==null) { 
      Scores = new Vector<String>(); 
     } 
     Scores.add(input); 
    } 


} 

回答

2

每個都是對的。不過,我會建議採取更進一步的措施。你的分數向量可以是一個自己的類,包括學生的名字和分數。

你需要一個getScores()和setScores(Vector newValues)方法。重複控制將注意插入正確的位置。

如果您使用自定義類,則需要獲取/設置方法。那麼你可以綁定字段e。 G。 RPT。學生

您也可以考慮參觀集合框架,看看是否有更好的契合:

  • 矢量保持插入順序
  • 設置:確保不重複(實施Comparble)
  • 樹套裝:保持東西自動排序

還有更多,玩得開心!

讓我們知道如何去

+0

重複控制需要綁定不是你的rpt對象,但rpt.Scores – stwissel

+1

Stephan的說法正確:術語「bean」指的是遵循一組約定的Java類,其中兩個已經遵循:無參數的構造函數並實現Serializable。第三種是將所有屬性封裝在「getters」和「setters」中。如果你沒有getter和setter,它不是一個bean,它是一個POJO(「普通的舊Java對象」)。術語「託管bean」意味着Domino正在爲您管理變量名稱和範圍,但將其註冊爲託管bean並不會使其成爲一個bean ......遵守bean約定會使其成爲一個bean。 :) –

+0

謝謝斯蒂芬,你的建議是非常有用的。我已經寫了lotusscript永遠,我仍然在學習Domino/XPages開發的Java方面。 – tylernaas

1

與setScores方法,而不是一個addScores方法試試。你需要一個getter和一個setter來編輯控件。

0

感謝stwissel,我創建了一個public class Score {}studentIDvalue屬性,然後讓我的成績矢量Score對象的集合,而不是String值。然後我將編輯框綁定到#{rpt.scores[rowIndex].value}現在我可以通過Score類的獲得者和設置者來獲取並設置值!

這裏是我如何做了它的一些細節:

我有一個重複控制var="rowData" indexVar="rowIndex"和一個var="rpt" indexVar="rptIndex"嵌套重複控制和數據源是我的分配對象。然後我的編輯框的值,我用我的新Score類的value財產。

短短版會是這個樣子:

<xp:repeat... var="rowData" indexVar="rowIndex" ...> 
    <xp:repeat... var="rpt" indexVar="rptIndex" value="#{gbPage.assignments}" ...> 
     <xp:inputText id="Input12" value="#{rpt.scores[rowIndex].value}" ...> 
     </xp:inputText> 
    </xp:repeat> 
</xp:repeat> 

我不得不改變我的Assignment類一對夫婦的方法:

package com.logickey.gradebook; 

import java.io.Serializable; 
import com.logickey.gradebook.Score; 
import java.util.Arrays; 
import java.util.Vector; 


public class Assignment implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -1500382996574385949L; 
    private String Name; 
    private String Teacher; 
    private String AssignNum; 
    private String AssignDate; 
    private **Vector<Score> Scores;** 
    private String Category; 
    private String TotalPoints; 
    private Arrays Standards; 

    public Assignment() { 
     Name = ""; 
     Teacher = ""; 
     AssignNum = ""; 
     AssignDate = ""; 
     **Scores = new Vector<Score>();** 
    } 
    public Assignment(String name, String teacher, String assignNum, String assignDate, **Vector<Score> scores**){ 
     Name = name; 
     Teacher = teacher; 
     AssignNum = assignNum; 
     AssignDate = assignDate; 
     Scores = scores; 
    } 

    /* 
    * 
    * some code removed from here.... 
    * */ 

    public void setScores(Vector<Score> scores) { 
     Scores = scores; 
    } 
    public Vector<Score> getScores() { 
     return Scores; 
    } 
    /** 
    * custom methods 
    */ 

//added two parameters to the addScore method 
public void addScore(String studentID, String value) { 
    if (Scores==null) { 
     Scores = new Vector<Score>(); 
    } 
    **Scores.add(new Score(studentID, value));** 
} 
} 

這裏是Score類我說:

package com.logickey.gradebook; 

import java.io.Serializable; 

public class Score implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 3888467323290005584L; 
    private String StudentID; 
    private String Value; 

    public Score() { 
     StudentID = ""; 
     Value = ""; 
    } 

    public Score(String studentID, String value) { 
     StudentID = studentID; 
     Value = value; 
    } 

    public String getStudentID() { 
     return StudentID; 
    } 

    public void setStudentID(String studentID) { 
     StudentID = studentID; 
    } 

    public String getValue() { 
     return Value; 
    } 

    public void setValue(String value) { 
     Value = value; 
    } 

} 
+0

不錯,我想讓你嘗試一點修改。而不是綁定到「賦值」綁定到「assignment.scores」,然後「#{rpt.value}」 - >也應該工作,並且不需要讀取2個變量 – stwissel

相關問題