【发布时间】:2019-07-24 03:39:36
【问题描述】:
我有一个 h:selectOneMenu,其信息来自 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:inputTexts 中看到该人的信息,以便我可以编辑这些值中的一个或多个,然后按提交按钮,这将对数据库进行整个更新。
这是管理编辑和更新的 .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是空白的,只是不发送新的信息去更新,所以已经保存的信息不会变成空白信息?
【问题讨论】:
-
所有 3 个真实问题的答案都是:是的。第一个问题太笼统了……