我花了好几个小时来解决我的问题,但不幸的是没有成功。
我将用户数据显示在p:datatable中正常工作。每行都有一个p:commandbutton,它应该显示一个用于编辑所选用户的p:对话框。这也很好。问题是对话框中的fiedls没有填充用户数据。
奇怪的是,如果我从对话框中删除所有p:inputtext字段,则剩余的h:outputtext字段id =“edit_dlg_bngrp”和id =“edit_dlg_username”显示数据。如果我更换它们,将显示数据。
我的xhtml页面
<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.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:sec="http://www.springframework.org/security/facelets/tags">
<h:body>
<ui:composition template="../template/commonTemplate.xhtml">
<ui:define name="body">
<h:form id="formTable">
<div class="largeText alignLeft"
style="min-width:600px; width: 100%; margin: 0 auto;">
<p:panel header="Benutzerübersicht" styleClass="largeText" >
<!-- ERROR MESSAGES -->
<div class="largeText alignLeft" style="width: 600px;">
<p:messages id="messages" />
</div>
<div style="height: 10px;">
</div>
<!-- ========================================================================= -->
<!-- =======================DATATABLE USER OVERVIEW ========================== -->
<!-- ========================================================================= -->
<p:dataTable var="user"
widgetVar="userTable"
value="#{benutzerBean.userTableData}"
filteredValue="#{benutzerBean.filteredTableData}"
emptyMessage="Keine Daten verfügbar"
paginator="true" rows="25"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
rowsPerPageTemplate="25,50,100"
>
<f:facet name="header" style="background:white;">
<p:outputPanel style="background:white;" >
<div class="floatRight" >
<h:outputText value="Suche: " />
<p:inputText id="globalFilter" onkeyup="userTable.filter()" style="width:150px" />
</div>
</p:outputPanel>
</f:facet>
<p:column id="bngroup_id" filterStyle="display:none"
sortBy="#{user.benutzergruppe.name}"
filterBy="#{user.benutzergruppe.name}"
headerText="Benutzergruppe"
filterMatchMode="contains">
<h:outputLabel value="#{user.benutzergruppe.name}" />
</p:column>
<p:column id="firstname_id" filterStyle="display:none"
sortBy="#{user.vorname}"
filterBy="#{user.vorname}"
headerText="Vorname"
filterMatchMode="contains" >
<h:outputLabel value="#{user.vorname}" />
</p:column>
<p:column id="lastname_id" filterStyle="display:none"
sortBy="#{user.nachname}"
filterBy="#{user.nachname}"
headerText="Nachname"
filterMatchMode="contains" >
<h:outputLabel value="#{user.nachname}" />
</p:column>
<p:column id="username_id" filterStyle="display:none"
sortBy="#{user.benutzername}"
filterBy="#{user.benutzername}"
headerText="Benutzername"
filterMatchMode="contains">
<h:outputLabel value="#{user.benutzername}" />
</p:column>
<p:column id="email_id" filterStyle="display:none"
sortBy="#{user.email}"
filterBy="#{user.email}"
headerText="E-mail"
filterMatchMode="contains" >
<h:outputLabel value="#{user.email}" />
</p:column>
<p:column id="aktiv_id" filterStyle="display:none"
sortBy="#{user.aktiv}"
filterBy="#{user.aktiv}"
headerText="Aktiv"
filterMatchMode="contains" >
<h:outputLabel value="#{user.aktiv}" />
</p:column>
<p:column id="edit_id"
style="width:80px;"
styleClass="alignCenter" >
<p:commandButton value="bearbeiten" update=":formTable:edit" oncomplete="editDialog.show()" style="font-size:10px;">
<f:setPropertyActionListener target="#{benutzerBean.selectedUser}" value="#{user}" />
</p:commandButton>
</p:column>
<p:column id="delete_id"
style="width:80px;"
styleClass="alignCenter" >
<p:commandButton value="löschen" update=":formTable:deleteUserdialog" oncomplete="deleteUserdialog.show()" style="font-size:10px;">
<f:setPropertyActionListener target="#{benutzerBean.selectedUser}" value="#{user}" />
</p:commandButton>
</p:column>
</p:dataTable>
<!-- ========================================================================= -->
<!-- ======================= EDIT USER DIALOG ========================== -->
<!-- ========================================================================= -->
<p:dialog id="editUserDialog" header="Benutzer bearbeiten" widgetVar="editDialog"
resizable="false" modal="true" showEffect="clip" hideEffect="clip" >
<p:panelGrid id="edit" columns="2" style="width:400px;">
<h:outputText value="Benutzergruppe" />
<h:outputText id="edit_dlg_bngrp" value="#{benutzerBean.selectedUser.benutzergruppe.name}" />
<h:outputText value="Benutzername:" />
<h:outputText id="edit_dlg_username" value="#{benutzerBean.selectedUser.benutzername}" />
<h:outputText value="Vorname:" />
<p:inputText id="edit_dlg_firstname" styleClass="width_100" value="#{benutzerBean.selectedUser.vorname}" />
<h:outputText value="Nachname:" />
<p:inputText id="edit_dlg_lastname" styleClass="width_100" value="#{benutzerBean.selectedUser.nachname}" />
<h:outputText value="Email" />
<p:inputText id="edit_dlg_email" styleClass="width_100" value="#{benutzerBean.selectedUser.email}" />
<p:commandButton id="save" value="Speichern" process="editUserDialog" actionListener="#{benutzerBean.submitEditUser}" oncomplete="editDialog.hide()" />
<p:commandButton value="Abbrechen" type="reset" onclick="editDialog.hide()" />
</p:panelGrid>
</p:dialog>
<!-- ========================================================================= -->
<!-- ======================= DELETE USER DIALOG ========================== -->
<!-- ========================================================================= -->
<p:dialog id="deleteUserdialog" header="Benutzer erstellen" widgetVar="deleteUserdialog" resizable="false" modal="true" >
<h:outputText id="delete" value="#{benutzerBean.selectedUser.vorname} löschen" />
</p:dialog>
</p:panel>
</div>
</h:form>
</ui:define>
</ui:composition>
我的ManagedBean
@Controller
@ManagedBean
@Scope(value="view")
public class BenutzerBean {
@Autowired
BenutzerService benutzerService;
private List<Benutzer> userTableData = new ArrayList<Benutzer>();
private List<Benutzer> filteredTableData;
private Benutzer selectedUser;
public BenutzerBean(){
}
@PostConstruct
public void populateTable(){
userTableData = benutzerService.getAllBenutzer();
}
public void submitEditUser(){
saveUser(selectedUser);
}
private void saveUser(Benutzer benutzer){
benutzerService.saveBenutzer(benutzer);
populateTable();
}
public List<Benutzer> getFilteredTableData() {
return filteredTableData;
}
public void setFilteredTableData(List<Benutzer> filteredTableData) {
this.filteredTableData = filteredTableData;
}
public void setUserTableData(List<Benutzer> userTableData) {
this.userTableData = userTableData;
}
public List<Benutzer> getUserTableData(){
return userTableData;
}
public Benutzer getSelectedUser() {
return selectedUser;
}
public void setSelectedUser(Benutzer selectedUser) {
this.selectedUser = selectedUser;
}
Benutzer Class
@Entity(name="BENUTZER")
public class Benutzer implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ID")
private Long id;
@ManyToOne
@JoinColumn(name = "BENUTZERGRUPPEN_ID")
@NotNull
private Benutzergruppe benutzergruppe;
@Column(name="VORNAME")
@NotNull
@Length(min=3, message="vorn")
private String vorname;
@Column(name="NACHNAME")
@NotNull
@Length(min=3, message="nach")
private String nachname;
@Column(name="BENUTZERNAME")
@NotNull
@Length(min=4, message="benu")
private String benutzername ;
@Column(name="PASSWORT")
private String passwort;
@Column(name="EMAIL")
private String email;
@Column(name="AKTIV")
private boolean aktiv = true;
@Column(name="GELOESCHT")
@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
private DateTime deleted;
@ManyToMany ( fetch= FetchType.EAGER)
@JoinTable( name="BENUTZER_ROLLEN",
joinColumns={@JoinColumn(name="BENUTZER_ID")} ,
inverseJoinColumns={@JoinColumn(name="ROLLE_ID")}
)
public List<Rolle> rollen = new LinkedList<>();
/////////////////////////////
// GETTER SETTER
///////////////////////////
public Benutzer(){}
public Benutzer(Benutzergruppe benutzergruppe ,String nachname, String vorname, String username,
String password, String email, boolean enabled) {
this();
this.benutzergruppe = benutzergruppe;
this.nachname = nachname;
this.vorname = vorname;
this.benutzername = username;
this.passwort = password;
this.email = email;
this.aktiv = enabled;
}
//--------- OTHER METHODS ---------------
public void deleteUser(){
aktiv = false;
setDeleted(DateTime.now());
}
public boolean isUserDeleted(){
return deleted != null;
}
public void disableUser(){
setAktiv(false);
}
public void enableUser(){
setAktiv(true);
}
public void addRole(Rolle role){
if(role == null)
throw new IllegalArgumentException("Add Role: role must not be null");
if(!rollen.contains(role)){
rollen.add(role);
role.addBenutzer(this);
}
}
public void removeRole( Rolle role){
if(role == null)
throw new IllegalArgumentException("Remove Role: role must not be null");
if(rollen.contains(role)){
rollen.remove(role);
role.removeBenutzer(this);
}
}
//============================================
// GETTER SETTER
//=========================================
public Long getId() {
return id;
}
public void setId(Long benutzerId) {
this.id = benutzerId;
}
public Benutzergruppe getBenutzergruppe() {
return benutzergruppe;
}
public void setBenutzergruppe(Benutzergruppe benutzergruppe) {
this.benutzergruppe = benutzergruppe;
}
public String getNachname() {
return nachname;
}
public void setNachname(String nachname) {
this.nachname = nachname;
}
public String getVorname() {
return vorname;
}
public void setVorname(String vorname) {
this.vorname = vorname;
}
public String getBenutzername() {
return benutzername;
}
public void setBenutzername(String username) {
this.benutzername = username;
}
public String getPasswort() {
return passwort;
}
public void setPasswort(String password) {
this.passwort = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public boolean isAktiv() {
return aktiv;
}
private void setAktiv(boolean enabled) {
this.aktiv = enabled;
}
public List<Rolle> getRollen() {
return Collections.unmodifiableList(rollen);
}
public void setRollen(List<Rolle> rollen) {
this.rollen = rollen;
}
public DateTime getDeleted() {
return deleted;
}
private void setDeleted(DateTime timestamp) {
this.deleted = timestamp;
}
有没有人知道如何解决这个问题?
祝你好运 彼得
答案 0 :(得分:2)
您的数据表和是<h:form id="formTable">
内的对话框。当您唤起对话框时,请调用:update =“:formTable:edit”。
你需要:
<h:form id="formTable">
<h:form>
。例如:<h:form id="dlgForm">
。对话框中的所有内容都将在新的h:form。update=":dlgForm:edit"
。您正在引用表单内的对话框和面板网格中的表单。 答案 1 :(得分:0)
仔细检查您的更新ID。我认为你的麻烦在于:
<p:commandButton value="bearbeiten" update=":formTable:edit" oncomplete="editDialog.show()" style="font-size:10px;">
我认为你的更新应该是update =“:formTable:editUserDialog:edit”。使用FireBug或类似方法确认正确的ID。