2011-11-14 8 views
1

私はajaxを持つフォームを含む複合コンポーネントを持っています。私が理解できないのは、@ form/@ allのレンダリングパラメータでのみ機能する理由です。f:ajaxは@formまたは@allのみで動作します

<cc:interface> 
    <cc:attribute name="radioItem"/> 
    <cc:attribute name="radioItems" /> 
    <cc:attribute name="compImage" /> 
    <cc:attribute name="compSpecification"/> 

    </cc:interface> 

<!-- IMPLEMENTATION --> 
<cc:implementation> 
    <h:form> 
     <div id="options"> 
      <h:selectOneRadio value="#{cc.attrs.radioItem}" > 
       <f:selectItems value="#{cc.attrs.radioItems}" /> 
       <f:ajax render=":details" /> 
    </h:selectOneRadio> 
     </div> 

     <div id="details"> 
      <h:graphicImage value="#{cc.attrs.compImage}"/> 
      <h:outputText value="#{cc.attrs.compSpecification}"/> 
     </div>  
    </h:form> 
</cc:implementation> 

何が欠けていますか?

答えて

3

この問題は二つある:JSFはできませんので、

  1. 再レンダリングされる要素がある間は、同じUINamingContainer親の内側に絶対のクライアントID :detailsを指定していますそれをコンポーネントツリーに配置することができます。相対クライアントID detailsを指定する必要があります。

  2. 実際のJSFコンポーネントではなくプレーンなバニラHTML要素にIDを指定しているため、JSFはコンポーネントツリー内でこのIDを特定できません。実際のJSFコンポーネントを使用する必要があります。 <div><h:panelGroup layout="block">に置き換える必要があります。それは@formで動作し、JSFの要素を見つけることができるという理由だけで@allがAJAXアクションがされたコンポーネントに対して再レンダリングされるべきであることを

    <h:form> 
        <div id="options"> 
         <h:selectOneRadio value="#{cc.attrs.radioItem}" > 
          <f:selectItems value="#{cc.attrs.radioItems}" /> 
          <f:ajax render="details" /> 
         </h:selectOneRadio> 
        </div> 
    
        <h:panelGroup id="details" layout="block"> 
         <h:graphicImage value="#{cc.attrs.compImage}"/> 
         <h:outputText value="#{cc.attrs.compSpecification}"/> 
        </h:panelGroup>  
    </h:form> 
    

だから、それを両方を修正つまりそれぞれ親のUIFormUIViewRootのコンポーネントが呼び出されました。

+0

よろしくお願いいたします。 – BalusC

関連する問題