将编辑框控件绑定到托管bean中的特定Vector元素?

时间:2013-07-06 23:18:32

标签: xpages managed-bean

我有一个测试成绩分数向量,作为我的Assignment类的属性。

我在xpage上有一个编辑框,我想编辑该值并写回托管bean中的Vector。编辑框的值绑定是: <xp:this.value><![CDATA[#{rpt.scores[rowIndex]}]]></xp:this.value>其中rpt是来自我的bean的Assignment对象。编辑框处于重复控制状态,因为我不知道每次有多少学生参加考试。所以我使用重复控件的rowIndex来识别我要绑定的分数向量的哪个元素。

它正在正确读取Scores Vector中的值,但我似乎无法更改该值并将其写回Vector。

如何让它将值写回Assignment类的Scores [n]元素?

这是我的bean的作业类:

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);
    }


}

3 个答案:

答案 0 :(得分:2)

Per是对的。不过我建议更进一步。你的分数Vector可以是一个自己的类,包括学生姓名和分数。

你需要一个getScores()和setScores(Vector newValues)方法。重复控制将注意插入正确的位置。

如果您使用自定义类,则需要获取/设置方法。然后你可以绑定字段e。 G。 RPT。学生

您也可以考虑访问Collection框架以查看是否更适合:

  • Vector保持插入顺序
  • 设置:确保没有重复项(实现可比较)
  • 树集:自动保存事物

还有更多,玩得开心!

让我们知道它是怎么回事

答案 1 :(得分:1)

尝试使用setScores方法而不是addScores方法。你需要一个getter和一个setter来进行可编辑的控制。

答案 2 :(得分:0)

感谢stwissel,我创建了一个public class Score {},其属性为studentIDvalue,然后使我的分数向量成为Score个对象的集合,而不是String值。然后我将编辑框绑定到#{rpt.scores[rowIndex].value}现在我可以通过Score类的getter和setter来获取和设置值!

以下是我如何做到的一些细节:

我有一个重复控件var="rowData" indexVar="rowIndex"和一个带var="rpt" indexVar="rptIndex"的嵌套重复控件,数据源是我的Assignment对象。然后,对于我的编辑框的值,我使用了我的新value类的Score属性。

短短版本看起来像这样:

<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;
    }

}