在 h:selectOneMenu 更改时自动填充多个 h:inputText
Autofill several h:inputText on h:selectOneMenu change
我有一个 h:selectOneMenu,其中包含来自 TreeMap 的信息,而 TreeMap 的信息来自数据库。 TreeMap 包含多个用户的主键和值(名字和姓氏,以及一个整数)。
在 h:selectOneMenu 下面,我有几个 h:inputText。这是代码:
<h:form>
<table border="1">
<thead><tr><th colspan="99">User</th></tr></thead>
<tbody>
<tr>
<td><h:outputLabel value="ID:"/></td>
<td>
<h:selectOneMenu id="usrid" value="#{webUser.id}">
<f:selectItem itemValue="#{null}" itemLabel="Select One" />
<f:selectItems value="#{webUser.availableUsers}" />
</h:selectOneMenu>
</td>
<td><h:message for="usrid"/></td>
</tr>
<tr>
<td><h:outputLabel value="First Name:"/></td>
<td><h:inputText id="name" value="#{webUser.name}" required="true" maxlength="20"/></td>
<td><h:message for="name"/></td>
</tr>
<tr>
<td><h:outputLabel value="Last Name:"/></td>
<td><h:inputText id="lastName" value="#{webUser.lastName}" required="true" maxlength="20"/></td>
<td><h:message for="lastName"/></td>
</tr>
<tr>
<td><h:outputLabel value="Balance:"/></td>
<td><h:inputText id="balance" value="#{webUser.balance}" required="true" onkeypress="if (event.which < 48 || event.which > 57) return false;"/></td>
<td><h:message for="balance"/></td>
</tr>
</tbody>
</table>
<h:commandButton value="Submit" action="#{webUser.edit()}"/>
</h:form>
我需要的想法是用h:selectOneMenu中选择的项目的信息填充inputTexts。例如,如果我选择 ID(001), firstname(John), lastname(Doe), balance(100),我想看到这个人的信息显示在它的每个通讯员 h:inputText 中,所以我可以编辑这些值中的一个或多个,然后按“提交”按钮,这会完成对数据库的整个更新。
这是 .java 中管理编辑和更新的部分:
private UsersFacade uf;
private String id;
private String name;
private String lastName;
private int balance;
private TreeMap<String, String> availableUsers;
//...
public void edit() {
try {
Users newUser = new Users(id, name, lastName, balance);
uf.Edit(newUser);
} catch (Exception e) {
e.printStackTrace();
}
}
我该如何解决这个问题?我是否需要在 h:selectOneMenu 中使用某种 ajax 指令?我必须在下面的层上做一些代码吗?
或者有什么办法可以看出,如果inputTexts为空白,就不会发送新的信息进行更新,所以已经保存的信息不会变成空白信息?
我会用 ajax:
<h:form>
<h:selectOneMenu>
<f:selectItem itemLabel="Test" itemValue="test" value="#{bean.test}" />
<f:selectItem itemLabel="Test2" itemValue="test2" value="#{bean.test2}" />
...
<f:ajax event="change" listener="#{bean.change}" uptade="@form" />
</h:selectOneMenu>
<h:inputText value="#{bean.test}" />
<h:inputText value="#{bean.test2}" />
...
</h:form>
这对我来说很好用。您必须对其进行编辑以使其适合您的应用程序。
我有一个 h:selectOneMenu,其中包含来自 TreeMap 的信息,而 TreeMap 的信息来自数据库。 TreeMap 包含多个用户的主键和值(名字和姓氏,以及一个整数)。
在 h:selectOneMenu 下面,我有几个 h:inputText。这是代码:
<h:form>
<table border="1">
<thead><tr><th colspan="99">User</th></tr></thead>
<tbody>
<tr>
<td><h:outputLabel value="ID:"/></td>
<td>
<h:selectOneMenu id="usrid" value="#{webUser.id}">
<f:selectItem itemValue="#{null}" itemLabel="Select One" />
<f:selectItems value="#{webUser.availableUsers}" />
</h:selectOneMenu>
</td>
<td><h:message for="usrid"/></td>
</tr>
<tr>
<td><h:outputLabel value="First Name:"/></td>
<td><h:inputText id="name" value="#{webUser.name}" required="true" maxlength="20"/></td>
<td><h:message for="name"/></td>
</tr>
<tr>
<td><h:outputLabel value="Last Name:"/></td>
<td><h:inputText id="lastName" value="#{webUser.lastName}" required="true" maxlength="20"/></td>
<td><h:message for="lastName"/></td>
</tr>
<tr>
<td><h:outputLabel value="Balance:"/></td>
<td><h:inputText id="balance" value="#{webUser.balance}" required="true" onkeypress="if (event.which < 48 || event.which > 57) return false;"/></td>
<td><h:message for="balance"/></td>
</tr>
</tbody>
</table>
<h:commandButton value="Submit" action="#{webUser.edit()}"/>
</h:form>
我需要的想法是用h:selectOneMenu中选择的项目的信息填充inputTexts。例如,如果我选择 ID(001), firstname(John), lastname(Doe), balance(100),我想看到这个人的信息显示在它的每个通讯员 h:inputText 中,所以我可以编辑这些值中的一个或多个,然后按“提交”按钮,这会完成对数据库的整个更新。
这是 .java 中管理编辑和更新的部分:
private UsersFacade uf;
private String id;
private String name;
private String lastName;
private int balance;
private TreeMap<String, String> availableUsers;
//...
public void edit() {
try {
Users newUser = new Users(id, name, lastName, balance);
uf.Edit(newUser);
} catch (Exception e) {
e.printStackTrace();
}
}
我该如何解决这个问题?我是否需要在 h:selectOneMenu 中使用某种 ajax 指令?我必须在下面的层上做一些代码吗?
或者有什么办法可以看出,如果inputTexts为空白,就不会发送新的信息进行更新,所以已经保存的信息不会变成空白信息?
我会用 ajax:
<h:form>
<h:selectOneMenu>
<f:selectItem itemLabel="Test" itemValue="test" value="#{bean.test}" />
<f:selectItem itemLabel="Test2" itemValue="test2" value="#{bean.test2}" />
...
<f:ajax event="change" listener="#{bean.change}" uptade="@form" />
</h:selectOneMenu>
<h:inputText value="#{bean.test}" />
<h:inputText value="#{bean.test2}" />
...
</h:form>
这对我来说很好用。您必须对其进行编辑以使其适合您的应用程序。