2011-01-06 16 views
5

IはHを拡張するJSF複合コンポーネントを作成した:INPUTBOXJSF複合部品のID

 <p class="label clear"> 
      <label for="#{cc.attrs.id}" class=""> 
       #{cc.attrs.label}: 
      </label> 
     </p> 
     <p> 
      <h:inputText id="#{cc.attrs.id}" value="#{cc.attrs.value}" 
       size="#{cc.attrs.size}" /> 
      <ui:fragment rendered="#{cc.attrs.optional eq 'optional'}"> 
       <span class="optional">Optional</span> 
      </ui:fragment> 
     </p> 

このコンポーネントを使用する..

<my:inputText id="firstName" label="First Name" value="#{nameTO.firstName}"/> 

このコンポーネントがブラウザに描画されている場合、IDは"firstName:firstName"という形式のものである。

<input type="text" value="" name="firstName:firstName" id="firstName:firstName" gtbfieldid="3028"> 

これはJSF 2.0テンプレートの標準命名規則ですか?私はJSF 1.2 Faceletsテンプレートでこれを取得しませんでした。 "firstName:firstName"ではなく "firstName"としてIDを生成する方法はありますか

答えて

9

JSF 2.0複合コンポーネントはJSF 1.x/2.x Faceletsテンプレートと同じではありません。

複合コンポーネントには独自のIDもあります。基本的には、コンポジットコンポーネントの実装のコンポーネントでそれを再利用しています。実装のコンポーネントに別のID属性を追加したり、名前を変更したりすることを検討してください。例えば。

<h:inputText id="#{cc.attrs.name}"> 

<my:inputText name="firstName" label="First Name" value="#{nameTO.firstName}" /> 

しかしccIdが固定またはmy:inputTextidを自動生成されるか、HTMLでid="ccId:firstName"となってしまいます。また、単にそれを離れて離れて、HTMLでid="firstName:input"として終わる

<h:inputText id="input"> 

を使用することができます。