【发布时间】: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