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

2つの間違いがあります:

  1. このselectイベントは、HTML<select>要素の変更をフックするための間違ったイベントです。change代わりに必要です。

    <h:selectOneMenu id="dropdown" onchange="dropdownSelect()">
    
  2. このtextContentプロパティは、HTML<input>要素のHTMLDOMオブジェクト表現に存在しませんHtmlInputElementvalue代わりに必要です。

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

これらの問題はどちらもJSFとは関係ありません。これは単なる基本的なHTML/JSです。PHP、ASP、さらにはプレーンHTMLによって生成された同じHTMLコンテンツでも、まったく同じ問題が発生します。

興味のある場合、「JSF風」の方法は次のようになります。

<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 に答える