我有一个测试成绩分数向量,作为我的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);
}
}
答案 0 :(得分:2)
Per是对的。不过我建议更进一步。你的分数Vector可以是一个自己的类,包括学生姓名和分数。
你需要一个getScores()和setScores(Vector newValues)方法。重复控制将注意插入正确的位置。
如果您使用自定义类,则需要获取/设置方法。然后你可以绑定字段e。 G。 RPT。学生
您也可以考虑访问Collection框架以查看是否更适合:
还有更多,玩得开心!
让我们知道它是怎么回事
答案 1 :(得分:1)
尝试使用setScores方法而不是addScores方法。你需要一个getter和一个setter来进行可编辑的控制。
答案 2 :(得分:0)
感谢stwissel,我创建了一个public class Score {}
,其属性为studentID
和value
,然后使我的分数向量成为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;
}
}