User interface JSF2.0标识整个表单中更改的值

User interface JSF2.0标识整个表单中更改的值,user-interface,jsf-2,User Interface,Jsf 2,我正在从事JSF2.0项目,在这个项目中,屏幕上有60个带有预填充值的字段。 用户可以在屏幕上编辑任意数量的字段,当他单击“保存”按钮时,我必须在下一个屏幕上显示用户编辑的字段以及新旧值 最好的方法是什么。 屏幕应该是这样的 FieldName Old Value New Value 谢谢你的帮助 谢谢。让我们假设您的预填充值已从某个对象(称为someObject,是SomeBean的字段)中的数据库中提取,并显示为 从数据库填充someObject后,可以创建另一个(复

我正在从事JSF2.0项目,在这个项目中,屏幕上有60个带有预填充值的字段。 用户可以在屏幕上编辑任意数量的字段,当他单击“保存”按钮时,我必须在下一个屏幕上显示用户编辑的字段以及新旧值

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

FieldName  Old Value          New Value
谢谢你的帮助


谢谢。

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

从数据库填充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;
}
在表中显示已编辑字段的页面应如下所示:

<!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>


我希望这会有帮助。

你试过什么吗?如果是,则发布该代码。@Satyam Koyani我尝试使用BeanUtils遍历所有字段,并将DB中的旧值与用户输入的新值进行比较。谢谢,我将尝试此操作
<!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>