2013-04-09 14 views
10

私は、次のHTML出力としてh:inputTextをレンダリングする必要があります。h:inputTextにname属性を指定する方法は?

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

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

+0

HTTP探しているものであると思います。コム/質問/ 6859520 /追加カスタム属性 - HTML5サポートツーJSF-2-0-uiinput成分 – Daniel

答えて

14

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

あなたがとにかく具体的な機能要件を達成するために基本的に2つのオプションました:

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

    <h:form prependId="false"> 
    

    これにより、<f:ajax>が失敗します。

  2. 代わりに、JSFコンポーネントの

    使用プレーンHTML要素:あなたが唯一の要求に@ManagedPropertyを経由して自分で収集する必要があり

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

    は、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のようあなたが最終的には簡単にカスタムのレンダリングキットを必要とせずにpassthrough attributesを宣言することができます。

<... xmlns:a="http://xmlns.jcp.org/jsf/passthrough"> 
... 
<h:inputText a:type="email" ... /> 
+0

作業 –

+0

のもう一つの古典的な作品@BalusC '' 'の原因となります' prependIdは= "false" に追加する理由失敗する? – Tarik

+3

@Tarik:実行するコンポーネントが見つかりません。 'prependId =" false "'を使わないでください。 JSF 1.2でそれを追加してはいけません。 – BalusC

-1

名前属性を指定しなくても、何でもできます。 id属性で十分です。例ごとに次のことを試してください:// stackoverflowの:

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

... 
$("#email input").click(function (event) { 
... 
} 

代わり

$("#email input[name='email']").click(function (event) 

で、これはあなたが:)

+1

これは、ページに設定されている他の属性がなくても動作しません**これらの属性は使用しないでください**。受け入れられた答えのポイント1を参照してください。これをアップした人は、受け入れられた答えを読むべきです... – Kukeltje

+0

たぶん私は最初にそれをキャッチしませんでした(それはjs呼び出しであると思った)。しかし、私が今すれば、プロパティファイルを使用して、以下の構文でそれらを呼び出すことができます:value = "#{prefix.properties}" – Henz

関連する問題