画面に値が事前に入力された60個のフィールドがあるJSF2.0プロジェクトに取り組んでいます。ユーザーは画面内の任意の数のフィールドを編集できます。「保存」ボタンをクリックすると、ユーザーが編集したフィールドを次の画面に古い値と新しい値で表示する必要があります。
それを行う最善の方法は何でしょうか。画面はこうあるべき
FieldName Old Value New Value
どんな助けでも大歓迎
ありがとう。
画面に値が事前に入力された60個のフィールドがあるJSF2.0プロジェクトに取り組んでいます。ユーザーは画面内の任意の数のフィールドを編集できます。「保存」ボタンをクリックすると、ユーザーが編集したフィールドを次の画面に古い値と新しい値で表示する必要があります。
それを行う最善の方法は何でしょうか。画面はこうあるべき
FieldName Old Value New Value
どんな助けでも大歓迎
ありがとう。
SomeBean のフィールドである someObject と呼ばれるオブジェクトのデータベースから事前入力された値が取得され、次のように表示されたとします。
<h:inputText value="#{someBean.someObject.someValue}">
.
someObject がデータベースから取り込まれた後、別の (コピー) オブジェクトを作成できます: oldSomeObject に、someObject のフィールド値をコピーします。60 個の値を持つフォームを送信した後、新しいページで、SomeBean からメソッドを呼び出すことができます。
public ArrayList<EditedField> getEditedFields(){
ArrayList<EditedField> editedFields = new ArrayList<EditedField>();
for(int i=0; i<oldSomeObject.getFieldValues().size(); i++){
if(!someObject.getFieldValues().contains(oldSomeObject.getFieldValues().get(i))){
editedFields.add(new EditedField(oldSomeObject.getFieldNames.get(i), oldSomeObject.getFieldValues().get(i), someObject.getFieldValues().get(i)));
}
}
return editedFields;
}
ここ:
getFieldValues() はクラス SomeObject のメソッドで、すべてのフィールドの (文字列) 値の ArrayList を返します。
getFieldNames() はクラス SomeObject のメソッドで、すべてのフィールドの名前の ArrayList を返します (同じ順序で)。
EditedField は、編集されたフィールドを記述するクラスです。
public class EditedField(){
private String fieldName;
private String oldValue;
private String newValue;
public EditedField(String fieldName, String oldValue, String newValue){
this.fieldName = fieldName;
this.oldValue = oldValue;
this.newValue = newValue;
}
public void setFieldName(String fieldName){
this.fieldName = fieldName;
}
public String getFieldName(){
return fieldName;
}
public void setOldValue(String oldValue){
this.oldValue= oldValue;
}
public String getOldValue(){
return oldValue;
}
public void setNewValue(String newValue){
this.newValue= newValue;
}
public String getNewValue(){
return newValue;
}
}
テーブル内の編集済みフィールドを表示するページは、次のようになります。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<h:dataTable value="#{someBean.editedFields}" var="field">
<h:column>
<f:facet name="header">
<h:outputText value="Field Name"></h:outputText>
</f:facet>
<h:outputText value="#{field.fieldName}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Old Value"></h:outputText>
</f:facet>
<h:outputText value="#{field.oldValue}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="New Value"></h:outputText>
</f:facet>
<h:outputText value="#{field.newValue}"></h:outputText>
</h:column>
</h:body>
</html>
それが役立つことを願っています。