2016-12-27 32 views
1

私の問題の短いバージョンは、beanから値を変更した後にinputtextがbeanの値を変更しないということです。
長いバージョン:
ユーザー情報を持つdataTableのフォームがあります。いくつかのinputTexts、および2つのボタン。 inputTextsを入力すると、指定されたデータで新しいユーザーが作成され、dataTableに表示されます。これは問題なく動作します。できるだけ多くのユーザーを作成できます。
データグリッドから行を選択した場合、inputTextフィールドにユーザー情報が表示されている必要があります。これは問題なく動作し、管理者が変更することができます。しかし、BeanのinputText値を変更した後で、管理者がinputTextでsometingを変更した場合、値は変更に従わず、値は変わりません。私は何が間違っていますか?
JSFページには、次のようになります。jsf inputtextがbean内で値を更新した後に更新されない

<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 
} 
} 
+0

ネストされたフォームar許可されていません! (あなたが[mcve]を作成していれば、あなたの問題では少なくともそれが役割を果たすことが分かっただろう)http://stackoverflow.com/questions/5665524/form-within-form-skip-validation-of-親の形 – Kukeltje

+0

あなたはそれを指摘してくれました。私は内側のフォームを削除しましたが、HTMLは今のところ1つのフォームしか含んでいません。 – kukker

+0

私は、入れ子にされたフォームはKukeltjeが述べたように許可されていないことを強調したいと思います。テンプレートを使用している場合は、親テンプレートまたは現在のページのいずれかにフォームがあることを確認します。これは私のために働いた。 –

答えて

0

あなたは

を更新したいコンポーネントを処理する必要が
<p:commandButton id="modifyUser" value="Modify User" icon="ui-icon-wrench" update="userAddingGrid" action="#{settingsbean.updateUser}" process="userAddingGrid"/> 
+0

ありがとうございますが、それは役に立たなかったようです。私はフォームを処理しようとしましたが、無駄でした。 – kukker

+0

これはまれです。値が更新されたことをどこで確認していますか?あなたがデータベースでそれをやっているのであれば、あなたの更新メソッドに問題があるかもしれません。あなたはupdateメソッドで使用する前に、選択したユーザーのDTOにuserName、mailAddress、およびdeletedUserを再割り当てしていますか? –

+0

私はちょうどそれをデバッグしました。私は_stopped_ "Create User"が最初の行で呼び出す関数を停止し、userName、userPassword、...フィールドを評価したので、DBやその他の関数が呼び出される前に表示されます。フィールド全体のページをリロードした直後に、フィールドセッターメソッドがアンフックしたり、呼び出されたりしないようです。 – kukker

関連する問題