繁体   English   中英

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

[英]Binding an edit box control to a specific Vector element in managed bean?

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

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

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

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

这是我的bean的Assignment类:

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


}

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

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

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

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

  • Vector保持插入顺序
  • 设置:确保无重复(实现Comparble)
  • 树集:保持自动排序的东西

还有更多,玩得开心!

让我们知道怎么回事

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

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

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

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM