Xpages 将编辑框控件绑定到托管bean中的特定向量元素?
我有一个测试分数向量,作为我作业类的属性 我在xpage上有一个编辑框,我想在其中编辑值并写回托管bean中的向量。编辑框的值绑定为:Xpages 将编辑框控件绑定到托管bean中的特定向量元素?,xpages,managed-bean,Xpages,Managed Bean,我有一个测试分数向量,作为我作业类的属性 我在xpage上有一个编辑框,我想在其中编辑值并写回托管bean中的向量。编辑框的值绑定为: 其中rpt是我的bean中的赋值对象。编辑框位于重复控件中,因为我不知道每次有多少学生参加考试。因此,我使用repeat控件的rowIndex来确定要绑定到分数向量的哪个元素 它正确地读取了分数向量中的值,但我似乎无法更改该值并将其写回向量 如何让它将值写回作业类的Scores[n]元素 以下是my bean中的作业类: package com.logickey
其中rpt
是我的bean中的赋值对象。编辑框位于重复控件中,因为我不知道每次有多少学生参加考试。因此,我使用repeat控件的rowIndex
来确定要绑定到分数向量的哪个元素
它正确地读取了分数向量中的值,但我似乎无法更改该值并将其写回向量
如何让它将值写回作业类的Scores[n]元素
以下是my 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);
}
}
package com.logickey.gradebook;
导入java.io.Serializable;
导入java.util.Vector;
公共类分配实现了可序列化{
/**
*
*/
私有静态最终长serialVersionUID=-1500382996574385949L;
私有字符串名称;
私人弦乐教师;
私有字符串AssignNum;
私有字符串赋值日期;
私有向量分数;
公开转让(){
Name=“”;
教师=”;
AssignNum=“”;
转让日期=”;
分数=新向量();
}
公开作业(字符串名称、字符串教师、字符串赋值编号、字符串赋值日期、向量分数){
名称=名称;
教师=教师;
AssignNum=AssignNum;
AssignDate=AssignDate;
分数=分数;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
名称=名称;
}
公共字符串getTeacher(){
归国教师;
}
公共空白设置器(字符串教师){
教师=教师;
}
公共字符串getAssignNum(){
返回AssignNum;
}
公共void setAssignNum(字符串assignNum){
AssignNum=AssignNum;
}
公共字符串getAssignDate(){
返回日期;
}
public void setAssignDate(字符串assignDate){
AssignDate=AssignDate;
}
公共向量getScores(){
返回分数;
}
公共void addScore(字符串输入){
如果(分数==null){
分数=新向量();
}
分数。添加(输入);
}
}
尝试使用setScores方法,而不是addScores方法。对于可编辑控件,需要一个getter和setter 佩尔是对的。不过,我建议再进一步。您的分数向量可以是自己的类,包括学生姓名和分数
您需要一个getScores()和setScores(Vector newValues)方法。重复控制将注意插入正确的位置
如果使用自定义类,则需要对其使用get/set方法。然后可以绑定字段e。Grpt。学生
您也可以考虑访问集合框架,看看是否有更好的匹配:
- 向量保持插入顺序
- 设置:确保没有重复(实现可比较)
- 树集:使内容自动排序
studentID
和value
的public class Score{}
,然后将我的分数向量作为Score
对象的集合,而不是String
值。然后我将编辑框绑定到{rpt.scores[rowIndex].value}
现在我可以通过Score
类的getter和setter获取和设置值
以下是我如何做到这一点的一些细节:
我有一个repeat控件var=“rowData”indexVar=“rowdex”
和一个嵌套的repeat控件,该控件带有var=“rpt”indexVar=“rptdex”
,数据源是我的分配对象。然后,对于编辑框的值,我使用了新的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>
以下是添加的分数一级:
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;
}
}
repeat控件不需要绑定到您的rpt对象,但是rpt.ScoresStephan是正确的:术语“bean”指的是遵守一组约定的Java类,您已经遵循了其中两个约定:无参数构造函数和实现Serializable。第三种方法是将所有属性包装在“getter”和“setter”中。如果没有getter和setter,那么它就不是bean,而是POJO(“纯旧Java对象”)。术语“托管bean”只是意味着Domino正在为您管理变量名和范围,但将其注册为托管bean并不意味着它就是一个bean。。。遵守bean约定使其成为bean。:)谢谢Stephan,你的建议非常有用。我一直在编写lotusscript,我仍在学习Domino/XPages开发的Java方面。很好,我希望您尝试一点修改。与其绑定到“assignment”,不如绑定到“assignment.scores”,然后再绑定到“#{rpt.value}”->,这样就不需要读取两个变量了
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;
}
}