JSF:在Primefaces中提交数据后取消数据表行编辑

时间:2015-03-31 16:06:47

标签: jsf jsf-2 primefaces datatable

我正在使用JSF 2.1 + Primefaces 5.1开发一个Web应用程序。我有一个可编辑行的数据表。我捕获rowEdit事件并调用数据库过程来对新数据进行一些验证,并在用户单击"检查"时更新记录。按钮。但是存在一个问题:无论验证成功还是失败,GUI中的数据表行都会更新。如果在DB过程中完成的验证失败,我希望将行数据中的更改反转到之前的状态。我怎么能这样做?

<p:dataTable id="users_table_id" var="user" value="#{usersBean.users}" rowKey="#{user.id}" paginator="true"
            paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
               rowsPerPageTemplate="5,10,15" emptyMessage="#{msgs.no_records}" sortBy="#{user.id}" sortOrder="ascending" rows="15" editable="true">
            <f:facet name="header">
                #{msgs.users}               
            </f:facet>
            <p:ajax event="rowEdit" listener="#{usersBean.onRowEdit}"/>
            <p:ajax event="rowEditInit" listener="#{usersBean.onRowEditInit}"/>
            <p:column headerText="#{msgs.id}" sortBy="#{user.id}" styleClass="centered-column">
                #{user.id}
            </p:column>          
            <p:column headerText="#{msgs.description}" sortBy="#{user.description}" styleClass="centered-column">
                <p:cellEditor>
                    <f:facet name="output">#{user.description}</f:facet>
                    <f:facet name="input"><p:inputText value="#{user.description}" styleClass="editable-cell"/></f:facet>
                </p:cellEditor>
            </p:column> 
            ...
            <p:column styleClass="datatable-row-editor">
                <p:rowEditor/>
            </p:column>
</p:dataTable>
@ManagedBean
@ViewScoped
public class UsersBean implements Serializable {

    private List<DtoUser> users;

    public void onRowEdit(RowEditEvent event) {
        logger.entry();
        DtoUser dtoUser = (DtoUser)event.getObject();
        this.updateUser(dtoUser);
        logger.exit();
    }

    public void updateUser(DtoUser dtoUser) { 
        try {
            logger.entry(dtoUser);
            DtoBoUsers dtoBoUsers = dtoUser.toDtoBoUsers();
            DtoTypeGenericResponse genericResponse = usersService.updateUser(dtoBoUsers);
            if (genericResponse.isError()) {
                // error in user update
            } else {
                // update successful
            }
            logger.exit(dtoUser);
        } catch (Exception e) {
            logger.error(ExceptionUtils.getStackTrace(e.fillInStackTrace()));
        }
    }
}

0 个答案:

没有答案