1

Assignment クラスのプロパティとして、テスト成績のスコアのベクトルがあります。

xpage に編集ボックスがあり、値を編集してマネージド Bean のベクターに書き戻します。エディット ボックスの値バインディングは次のとおり <xp:this.value><![CDATA[#{rpt.scores[rowIndex]}]]></xp:this.value>ですrpt。毎回何人の学生がテストを受けるかわからないため、編集ボックスは繰り返しコントロールにあります。そのrowIndexため、Scores Vector のどの要素にバインドするかを識別するために、繰り返しコントロールを使用しています。

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


}
4

3 に答える 3

1

addScores メソッドの代わりに setScores メソッドを試してください。編集可能なコントロールにはゲッターとセッターが必要です。

于 2013-07-07T02:10:27.007 に答える
0

stwisselのおかげで、とpublic class Score {}のプロパティを持つを作成し、Scores Vectorを値ではなくオブジェクトのコレクションにしました。次に、編集ボックスをクラスのゲッターとセッターを介して値を取得および設定できるようになりました!studentIDvalueScoreString#{rpt.scores[rowIndex].value}Score

ここに私がそれをした方法に関するいくつかの詳細があります:

繰り返しコントロールvar="rowData" indexVar="rowIndex"と入れ子になった繰り返しコントロールが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 に答える