-1

JSF 2 の xhtml ページに次のコードがあります。なぜこうなった?

<h:form>
    <h:panelGrid columns="2">
        Selected country locale : 
        <h:inputText  id="country" value="#{country.localeCode}" size="20" />
        Select a country {method binding}: 
        <h:selectOneMenu value="#{country.localeCode}" onchange="submit()"
            valueChangeListener="#{country.countryLocaleCodeChanged}">
            <f:selectItems value="#{country.countryInMap}" />
        </h:selectOneMenu>
        <script>
            alert("hi");
            document.getElementById("country").disabled=true;
        </script>
    </h:panelGrid>
</h:form>
4

2 に答える 2

0

コンポーネントが見つかりません。あなた<h:inputText>は の内部にある<h:form>ためid、次のパターンになります formName:componentName。for を指定しなかったidため<h:form>、JSF が for を生成します。そのため、 formj_id1926454887_72d35e53:countryがどこにあるかが表示されます。をよりシンプルに扱いたい場合は、値を に追加する必要があります。例えばj_id1926454887_72d35e53ididid<h:form>

<h:form id="form">
    <h:inputText  id="country" value="#{country.localeCode}" size="20" /> 
</h:form>

の ID は<h:inputText>になりますform:country

prependId = "false"さらに簡単に、フォームに追加するだけです

<h:form prependId="false">

そして今、あなたidの for<h:inputText>は単に になりますcountry

このIDを動的に取得するにはどうすればよいですか?

私はあなたが望むものを達成するためにあなたのコードを少し修正するつもりです (私はあなたがinput特定のイベントに基づいて無効にしたいと考えています)。この簡単な例を考えてみましょう

<h:form>
    <h:inputText  id="country" value="#{country.localeCode}" size="20" onclick="disableInputText(this.form)" />
</h:form>

ここでは、javascript 関数をHTML DOM イベントハンドラーにアタッチしています。この場合、inputクリックしたときに を無効にしたい (したがってonclick)。formまた、関数の参照としてを渡しています。次に、次のように Javascript を定義します。

<script>
    function disableInputText(form) {
        form[form.id + ":country"].disabled = true;
    }
</script>

オブジェクトを介してinput対応する JavaScriptの を取得し、その属性を に設定するだけです。(オブジェクトをのように表示できます)。idformdisabledtrueformMap

また、以下のリンクをチェックして、より多くの属性<h:inputText>と、使用できるさまざまなハンドラー (on接頭辞が付いているもの) を確認してください。

inputText タグ属性

また、ID がどのように生成されるか、および ID を決定する方法に関するその他の方法について全体像を把握するために、最も多くの票を集めた回答を確認してください。

Javascriptで使用できるようにJSFコンポーネントのIDを知るにはどうすればよいですか

于 2013-07-18T17:00:13.577 に答える