gpt4 book ai didi

java - h :commandButton not working within PrimeFaces p:dataTable

转载 作者:行者123 更新时间:2023-11-30 09:46:22 24 4
gpt4 key购买 nike

我有一个 PrimeFaces 数据表。对于此表中的每一行,我希望允许用户更新/删除行条目(用户)。

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<link type="text/css" rel="stylesheet" href="themes/bluesky/skin.css" />
</h:head>
<h:body>
<center>
<h:form>
<p:panel id="viewUsersPanel" header="View Users">
<p:dataTable var="user" value="#{uController.users}"
emptyMessage="No Users Found.">
<p:column style="text-align: center;">
<f:facet name="header">
<h:outputText value="Name" />
</f:facet>
<h:outputText value="#{user.name}" />
</p:column>
<p:column style="text-align: center;">
<f:facet name="header">
<h:outputText value="Postal Address" />
</f:facet>
<h:outputText value="#{user.address}" />
</p:column>
<p:column style="text-align: center;">
<f:facet name="header">
<h:outputText value="Phone Number" />
</f:facet>
<h:outputText value="#{user.phone}" />
</p:column>
<p:column style="text-align: center;">
<f:facet name="header">
<h:outputText value="Email Address" />
</f:facet>
<h:outputText value="#{user.email}" />
</p:column>
<p:column style="text-align: center;">
<f:facet name="header">
<h:outputText value="DOB" />
</f:facet>
<h:outputText value="#{user.dob}">
<f:convertDateTime pattern="dd-MMM-yyyy" />
</h:outputText>
</p:column>
<p:column style="text-align: center;">
<f:facet name="header">
<h:outputText value="No. Memberships" />
</f:facet>
<h:outputText value="#{user.numberOfMemberships}" />
</p:column>
<p:column style="text-align: center;">
<f:facet name="header">
<h:outputText value="Actions" />
</f:facet>
<h:commandButton value="Update" action="#{uController.update}" />
<h:commandButton value="Delete" action="#{uController.delete}" />
</p:column>
</p:dataTable>
<h:panelGrid columns="2" cellpadding="2" id="footerPanelGrid"
border="0">
<h:commandButton action="#{uController.home}" value="Home Page" />
</h:panelGrid>
</p:panel>
</h:form>
</center>
</h:body>
</html>

但是,这两个按钮都不起作用。相反,它们似乎只是刷新 View 页面。我已在调试中运行该应用程序,但更新或删除方法均未命中。

我怀疑这可能是由于在 p:dataTable 中使用了 h:commandButton。但是,我也尝试过 p:commandButton 但无济于事。

作为引用,这里是 UserController 类的片段:

@ManagedBean(name="uController")
public class UserController extends AbstractController {

private Collection<User> users;

...

public String update() {

System.out.println("Ready for update");

return "update-user";
}

public String delete() {

System.out.println("Ready for delete");

return "delete-user";
}
...
}

最佳答案

我找到了使用 ViewScoped bean 的解决方案。我为此遇到的文章:

Learning JSF2: Managed beans

我将 h:commandButton 更改为:

<h:commandButton value="Delete" action="#{userList.delete}">
<f:setPropertyActionListener target="#{userList.selectedUser}"
value="#{user}" />

我还重新设计了我的 UserController 类,它变成了 UserList:

import java.util.Collection;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

@ManagedBean(name="userList")
@ViewScoped
public class UserList {

private Collection<User> users;
private User selectedUser;

@ManagedProperty(value="#{userService}")
private UserService userService;

public void setUserService(UserService userService) {

this.userService = userService;
}

@PostConstruct
public void populateList() {

users = userService.getUsers();
}

public void delete() {

// TODO remove from DB

users.remove(selectedUser);
}

public User getSelectedUser() {

return selectedUser;
}

public void setSelectedUser(User selectedUser) {

this.selectedUser = selectedUser;
}

public Collection<User> getUsers() {

return users;
}

}

感谢您的回复 Zenzen。

关于java - h :commandButton not working within PrimeFaces p:dataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7174314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com