11

h:inputText次の html 出力としてレンダリングする必要があります。

  <input id="yourName" type="text" name="name" />
  <input id="email" type="text" name="email" />

ただしh:inputText、コンポーネントのクライアント ID と同じ name 属性をレンダリングします。name入力フィールドに、他のサイトの同じフィールド タイプに対して以前に送信された値から意味のあるオートコンプリートの提案を表示できるように、クライアント ID を入れるのではなく、自分で属性を指定したいと考えています。たとえばname="email"、電子メールの入力フィールドを使用すると、以前に他の Web サイトで送信した電子メール ID の候補がユーザーに表示されます。

4

2 に答える 2

17

を使用してそれを達成することはできません<h:inputText>。その名前は、クライアント ID に基づいて JSF によって自動生成されます (これは、コンポーネント ID とそのすべての名前付けコンテナーの親に基づいています)。

とにかく具体的な機能要件を達成するには、基本的に2つのオプションがあります。

  1. ネーミング コンテナーの親が他にない場合は、親フォームにその ID を付加しないように指示します。

    <h:form prependId="false">
    

    <f:ajax>ただし、これは失敗の原因になります。

  2. JSF コンポーネントの代わりにプレーンな HTML 要素を使用します。

    <input name="name" value="#{bean.name}" />
    <input name="email" value="#{bean.email}" />
    

    @ManagedPropertyリクエスト スコープの Beanを介して自分で収集するだけです。

    @ManagedProperty("#{param.name}")
    private String name;
    
    @ManagedProperty("#{param.email}")
    private String email;
    

    また、JSF 組み込みの検証/変換機能と ajax マジックを見逃してしまいます。

ただし、まったく異なる代替手段があります: HTML5 を使用します<input type="email">。このようにして、ブラウザーは、まったく同じタイプの入力で以前に入力されたすべての電子メールを自動提案します。これは、ネイティブではサポートされていません<h:inputText>ただし、 Adding custom attribute (HTML5) support to Primefaces (3.4)で回答されているように、カスタム レンダー キットを使用して機能させることができます。

<h:inputText type="email" ... />

JSF 2.2 の更新により、最終的にカスタム レンダー キットを必要とせずにパススルー属性を簡単に宣言できるようになりました。

<... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:inputText a:type="email" ... />
于 2013-04-09T11:09:30.033 に答える