【问题标题】:event.getObject() in row editing for primefaces sends the old value to the beanprimefaces 行编辑中的 event.getObject() 将旧值发送到 bean
【发布时间】:2013-10-09 05:15:53
【问题描述】:

我正在尝试使用素面的功能,该功能允许用户编辑表本身中的行数据。我已经按照这个链接来实现它:

http://www.primefaces.org/showcase/ui/datatableRowEditing.jsf

当我说编辑用户时,输入的新值不会发送到 bean。它仍然只显示旧值。

我在 JSF 中的代码:

<p:dataTable value="#{mybean.userList}"
        var="item"
        id="dataTab"
        widgetVar="usersTable"
        tableStyleClass="data"  paginator="true" rows="5"  
        filteredValue="#{userController.filteredUsers}"
        editable="true"
        rowKey="#{item}">

    <p:ajax event="rowEdit"   listener="#{mybean.onEdit}" update=":userForm:growl" />  
    <p:ajax event="rowEditCancel" listener="#{mybean.onCancel}" update=":userForm:growl" /> 
    <f:facet name="header">
        <p:outputPanel>  
            <h:outputText value="Search all fields:" />  
            <p:inputText id="globalFilter"     onkeyup="('usersTable').filter()"   style="width:150px" />  
        </p:outputPanel>     
    </f:facet>


    <p:column sortBy="#{item.firstName}" filterBy="#{item.firstName}" 
        filterMatchMode="startsWith">
        <p:cellEditor> 
            <f:facet name="header">  
                <h:outputText value="First Name" />  
            </f:facet>
            <f:facet name="output">
                <h:outputText  value="#{item.firstName}" />
            </f:facet>
            <f:facet name="input">  
                <p:inputText value="#{item.firstName}" style="width:100%"/>  
            </f:facet>  
        </p:cellEditor>
    </p:column>
    <p:column  sortBy="#{item.lastName}" filterBy="#{item.lastName}" filterMatchMode="startsWith">
        <p:cellEditor> 
            <f:facet name="header">  
                <h:outputText value="Last Name" />  
            </f:facet>

            <p:column headerText="Update" style="width:6%">  
                <p:rowEditor />  
            </p:column>    


</p:dataTable>

我在 bean 中的代码:

public String onEdit(RowEditEvent event) {
    User user=(User)event.getObject());
    user.getFirstName();
}

bean 中用于在 ui 中获取列表的代码:

 public List<UserBean> getUsersList(){
        List<UserBean> retval = new ArrayList<>();            
        for (Object[] tuple : myFacade.getUserList()) {
            UserBean ub = new UserBean();
            ub.setFirstName((String) tuple[0]);
            ub.setLastName((String)tuple[1]);
            ub.setEmailAddress((String)tuple[2]);
            ub.setOfficeNumber((String)tuple[3]);
            ub.setRole((String)tuple[4]);                
            retval.add(ub);
        }
        return retval;
    }

我尝试了一些帖子中给出的建议,但没有奏效。谁能告诉我如何获得新值。我使用的是 glassfish 4.0,primefaces 3.5。

【问题讨论】:

  • 在其他可能的问题中,您的代码没有正确关闭 JSF 标记。这是复制和粘贴问题吗?
  • 听起来转换/验证失败。你可以在表单中添加一个消息组件来验证吗?
  • @patstuart 是的,它只是一个复制粘贴错误,在我的 jsf 页面中很好。
  • @kolossus 我添加了消息组件 p:growl,它没有显示任何验证/转换错误。我只是将名字从“abc”更改为“abcd”。
  • 老实说,几乎不可能弄清楚,因为您发布的代码有各种各样的问题。您正在 getter 中执行复杂的操作,而您应该永远这样做(PrimeFaces 会抛出各种拟合)。您完全忽略了泛型,因此无法分辨正在传递的内容。您发布了 usersList 的代码,而不是 userList,它返回的似乎是 UserBean 列表,而不是 User。尝试用您的代码修复其中一些基本问题,也许您会在修复它时发现错误。

标签: jsf jsf-2 primefaces


【解决方案1】:

我能够找出问题所在..每次我在 getter 方法中获取列表时,我都会调用数据库来加载数据..但只有当列表为空时才应该这样做。以下代码给你一个清晰的画面:

public List<UserBean> getUsersList(){


        if(retval == null)
        {
            retval = new ArrayList<>();

            for (Object[] tuple : myFacade.getUserList()) {
            UserBean ub = new UserBean();
            ub.setFirstName((String) tuple[0]);
            ub.setLastName((String)tuple[1]);
            ub.setEmailAddress((String)tuple[2]);
            ub.setOfficeNumber((String)tuple[3]);
            ub.setRole((String)tuple[4]);

            retval.add(ub);
        }
        }
        return retval;
    }

所以 getUsersList 是我在 p:datatable 中的 var 值,现在当我调用 onEdit 时,它会检查列表是否为空,它会调用数据库还是不调用数据库。

【讨论】:

  • 我遇到了同样的问题,这是正确的答案。谢谢!
  • 不建议在 getter 中执行业务逻辑。相反,使用一些方法来初始化你的 bean,比如f:viewAction
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多