JSF2.0识别整个表单中更改的值

时间:2013-10-09 10:47:16

标签: user-interface jsf-2

我正在研究JSF2.0项目,其中一个屏幕有60个具有预填充值的字段。 用户可以在屏幕上编辑任意数量的字段,并且当他点击“保存”时,我必须在下一个屏幕中显示用户编辑过的具有旧值和新值的字段。按钮。

最好的方法是什么? 屏幕应该是这样的

FieldName  Old Value          New Value

任何帮助表示赞赏

感谢。

1 个答案:

答案 0 :(得分:0)

假设您的预填充值已从某个对象中的数据库中提取,称为someObject,它是SomeBean的一个字段,并显示为

<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中的方法,它返回所有字段的(String)值的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>

我希望它会有所帮助。