Краткая версия моей проблемы заключается в том, что входной текст не изменит значение в bean-компоненте после того, как я изменил значение из bean-компонента.
Более длинная версия:
Существует форма, в которой находится dataTable с информацией о пользователе; некоторые inputTexts и две кнопки. Если вы заполните inputTexts, новый пользователь будет создан с данными и появится в dataTable - это отлично работает, я могу создать как можно больше пользователей.
Сложная часть, если вы выберете строку из DataGrid, информация пользователя должна появиться в полях inputText - это работает отлично - поэтому администратор может их модифицировать. Но после изменения значений inputText в bean-компоненте, если администратор меняет someting в inputText, значение «не будет следовать» за изменениями, значение остается неизменным. Что я могу сделать неправильно?
страницы 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>
И мой боб выглядит следующим образом:
@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
}
}
Вложенные формы ar Не разрешено! (Если бы вы создали [mcve], вы бы обнаружили, что он по крайней мере играет определенную роль в вашей проблеме) http://stackoverflow.com/questions/5665524/form-within-form-skip-validation-of- parent-form – Kukeltje
Tankk вы за указание на это. Я удалил внутреннюю форму, HTML теперь содержит только одну форму. – kukker
Я хотел бы подчеркнуть, что вложенные формы не допускаются, как указано в Kukeltje. Если вы используете шаблоны, проверьте, что у вас есть одна форма либо в родительском шаблоне, либо на текущей странице. Это сработало для меня. –