1

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

我在 xpage 上有一个编辑框,我想在其中编辑值并写回托管 bean 中的 Vector。编辑框的值绑定是: 我的 bean 中的 Assignment 对象<xp:this.value><![CDATA[#{rpt.scores[rowIndex]}]]></xp:this.value>在哪里。rpt编辑框处于重复控制中,因为我不知道每次有多少学生参加考试。所以我使用rowIndexrepeat 控件来识别我想要绑定到的 Scores 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);
    }


}
4

3 回答 3

2

佩尔是对的。但是,我建议更进一步。你的分数向量可以是它自己的一个类,包括学生姓名和分数。

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

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

您还可以考虑访问 Collection 框架,看看是否有更好的选择:

  • Vector保持插入顺序
  • Set :确保没有重复(实现 Comparble)
  • 树集:保持东西自动排序

还有更多,玩得开心!

让我们知道怎么回事

于 2013-07-07T05:11:57.313 回答
1

尝试使用 setScores 方法而不是 addScores 方法。对于可编辑控件,您需要一个 getter 和一个 setter。

于 2013-07-07T02:10:27.007 回答
0

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

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

我有一个重复控件var="rowData" indexVar="rowIndex"和一个带有 a 的嵌套重复控件,var="rpt" indexVar="rptIndex"数据源是我的分配对象。然后对于我的编辑框的值,我使用了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;
    }

}
于 2013-07-07T12:51:37.477 回答