【问题标题】:jsf inputtext not updating value after changing it in beanjsf inputtext在bean中更改后不更新值
【发布时间】:2016-12-27 16:01:37
【问题描述】:

我的问题的简短版本是,在我修改了 bean 的值后,inputtext 不会更改 bean 中的值。
更长的版本:
有一个表格,其中是一个带有用户信息的数据表;一些输入文本和两个按钮。如果您填写 inputTexts,将使用给定数据创建一个新用户,并出现在 dataTable 中 - 这很好,我可以创建尽可能多的用户。
棘手的部分是,如果您从 dataGrid 中选择一行,则用户信息必须出现在 inputText 字段中——这很好用——因此管理员可以修改它们。但是在更改 bean 中的 inputText 值后,如果管理员更改了 inputText 中的某些内容,则值“不会跟随” tha 更改,该值保持不变。我会做错什么?
JSF 页面如下所示:

<html>
<h:body>
  <h:form style="font-size:14px;" id="setupform">
    ...
      <p:panel header="Edit users" id="userAddingPanel" rendered="#{settingsbean.validLogin}">
        <p:panelGrid columns="2" id="userAddingGrid">
          <p:outputLabel value="User Name: " />
          <p:inputText id="userName" value="#{settingsbean.userName}" />

          <p:outputLabel value="User Password: " />
          <p:password id="userPass" value="#{settingsbean.userPassword}" />

          <p:outputLabel value="E-mail address: " />
          <p:inputText id="userMailAddress" value="#{settingsbean.mailAddress}" />

          <p:outputLabel id="userDelete" value="Inactivate User: " />
          <p:selectBooleanCheckbox id="isUserDeleted" value="#{settingsbean.deletedUser}" />

          <p:commandButton id="addUser" value="Create User" update="userAddingGrid" icon="ui-icon-disk" action="#{settingsbean.addNewUser}" />

          <p:commandButton id="modifyUser" value="Modify User" icon="ui-icon-wrench" update="userAddingGrid" action="#{settingsbean.updateUser}" process="setupform"/>

        </p:panelGrid>

        <br/>

        <p:dataTable id="usersTable" var="users" value="#{settingsbean.userList}" tableStyle="overflow: auto;" stickyHeader="true" selectionMode="single" rowKey="#{users.id}" selection="#{settingsbean.selectedUser}">

          <p:ajax event="rowSelect" update=":setupform:userName, :setupform:userName,
                :setupform:userPass, :setupform:userMailAddress, :setupform:isUserDeleted" />

          <p:column headerText="#ID">
            <h:outputText value="#{users.id}" />
          </p:column>

          <p:column headerText="Name">
            <h:outputText value="#{users.loginName}" />
          </p:column>
          ...
        </p:dataTable>
      </p:panel>
    </h:form>
</h:body>

</html>

我的 bean 看起来像这样:

@ManagedBean(name ="settingsbean")
@ViewScoped
public class SettingsBean {
private String userName;
private String userPassword;
private boolean deletedUser;
private List<UserDTO> userList;
private UserDTO selectedUser;
/*with getters and setters, what is uncenventional is this setter*/
public void setSelectedUser(UserDTO selectedUser) {
/*if admin selects/unselects a user from dataTable*/        
this.selectedUser = selectedUser;
/*if unselect user*/
        if(selectedUser == null){
            userName = "";
            mailAddress = "";
            deletedUser = false;
/*if selects user*/        
}else {
            userName = selectedUser.getLoginName();
            mailAddress = selectedUser.getMailAddress();
            deletedUser = selectedUser.getDeleted();
        }
    }
...
public void addNewUser(){ 
//creates a new user in DB
}

public void updateUser(){
//will update user in DB
}
}

【问题讨论】:

  • 不允许嵌套表单! (如果您创建了一个minimal reproducible example,您会发现它至少在您的问题中起作用)stackoverflow.com/questions/5665524/…
  • 感谢您指出这一点。我删除了内部表单,HTML 现在只包含一个表单。
  • 我想强调一下 Kukeltje 所说的嵌套表单是不允许的。如果您使用模板,请检查您的父模板或当前页面中是否有一个表单。这对我有用。

标签: java jsf primefaces


【解决方案1】:

您必须处理要更新的组件

<p:commandButton id="modifyUser" value="Modify User" icon="ui-icon-wrench" update="userAddingGrid" action="#{settingsbean.updateUser}" process="userAddingGrid"/>

【讨论】:

  • 谢谢,但似乎没有帮助。我也尝试处理表单,但徒劳无功。
  • 这很少见。您在哪里验证值是否已更新?如果您在数据库中执行此操作,则问题可能出在您的更新方法中,您确定在更新方法中使用之前将用户名、邮件地址和已删除用户重新分配给您的 selectedUser DTO?
  • 我刚刚调试了它。我在第一行停止“创建用户”调用的函数,并评估了 userName、userPassword、... 字段,所以我看到是在 DB 或任何其他函数调用之前。看起来字段设置器方法在重新加载整个页面后取消挂钩或不会调用。
  • 将你的输入绑定到一个 UIComponent 并直接从组件中获取数据
  • 感谢您的提示,但不幸的是它没有帮助。 :/我将值更改为bingind,但在代码中我得到了相同的结果。我也尝试过使用其他浏览器,但徒劳无功。后来我认为它必须对 bean 范围做一些事情,所以我将其更改为 SessionScope,但结果相同。
猜你喜欢
  • 1970-01-01
  • 2012-06-25
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多