【问题标题】:Autofill several h:inputText on h:selectOneMenu change [duplicate]在 h:selectOneMenu 上自动填充几个 h:inputText [重复]
【发布时间】: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 &lt; 48 || event.which &gt; 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 个真实问题的答案都是:是的。第一个问题太笼统了……

标签: jsf xhtml


【解决方案1】:

我会用 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>

这对我来说很好。您必须对其进行编辑以使其适合您的应用程序。

【讨论】:

  • 我想知道ajax的价值是什么?在这个例子中,“变化”是什么?
  • “值”是在 bean 中执行的方法,因此它是您的“编辑方法”,事件指定何时执行此操作,因此“更改”意味着当 'h 的值: selectOneMenu' 已更改,您应该知道升级值。指向该 link 的 primefaces 展示的链接。 “改变”事件的许多价值之一。 @坦率
  • 我犯了一个错误,现在它是正确的@frank
  • 我正要问那个 ​​XD。非常感谢!它完全符合我的需要!
  • valueChangeListener 与带有侦听器 stackoverflow.com/questions/11879138/… 的 ajax 更改事件不同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多