1

到目前为止,我还没有找到正确的方法来做到这一点。我有一个 inputText 绑定到对象中的变量。我有一个 selectOneMenu 项目下拉菜单,非常棒。思想是在选择时,我只需将所选文本从下拉列表推入输入框(模拟键入它)。显然这是不行的。我可以很容易地在 javascript onselect 处理程序中获取所选元素的文本,但 inputText 拒绝接受它(可能选择重新显示存储的空字符串而不是接受它作为输入并将其推送到对象)。我也尝试过直接在 Java 中设置字符串,但结果完全相同(没有发生任何事情)。显然我的整个方法是有缺陷的。这样做的正确方法是什么?一些示例 xhtml 代码

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
      <script type="text/javascript">
        function dropdownSelect() {            
            var element=document.getElementById("form:dropdown");
            var text=element.options[element.selectedIndex].value;
            document.getElementById("form:part").textContent=text; // TODO doesn't work.  Neither does forcing the part number to change inside the object via Java code
        }
    </script>    
    <h:body>
        <h:form id="form">
            <h:inputText id="part" value="#{part.partNumber}"/>
            <h:selectOneMenu id="dropdown" onselect="dropdownSelect()">                
                <f:selectItems value="#{part.list}"/>
            </h:selectOneMenu>
        </h:form>
    </h:body>    
</html>
4

1 回答 1

1

有两个错误:

  1. select事件是挂钩 HTML<select>元素更改的错误事件。你需要change

    <h:selectOneMenu id="dropdown" onchange="dropdownSelect()">
    
  2. 该属性在 HTML元素的textContentHTML DOM 对象表示中不存在, . 你需要。<input>HtmlInputElementvalue

    document.getElementById("form:part").value = text;
    

这些问题都与 JSF 无关。它只是基本的 HTML/JS。对于由 PHP、ASP 甚至纯 HTML 生成的相同 HTML 内容,您会遇到完全相同的问题。

对于您感兴趣的情况,“JSF-ish”方式如下所示:

<h:form>
    <h:inputText id="part" value="#{part.partNumber}"/>
    <h:selectOneMenu value="#{part.selectedNumber}">
        <f:selectItems value="#{part.list}"/>
        <f:ajax listener="#{part.changeNumber}" render="part" />
    </h:selectOneMenu>
</h:form>

public void changeNumber(AjaxBehaviorEvent event) {
    partNumber = selectedNumber;
}
于 2013-01-10T19:38:28.870 回答