2011-08-11 7 views
1

サブミット/アクションイベントを持つ別のパネルのポップアップパネルに値を送信しようとしています。しかし、ポップアップパネルを開く前に、マネージドBean上で新しいエンティティオブジェクトを作成する関数を呼び出す必要があります。外側のパネルにはh:フォームしかありません。ネストできません。 a4j:にポップアップパネルをラップして、ポップアップパネル内の値を使用するときにこの部分のみを送信しました。これは機能しますが、ポップアップパネルが実行されるときに呼び出される必要がある準備関数の実行は行いません。私はa4j:commandLinkを試しましたが、そのコンポーネントはrich:popupPanel(どちらもRichfacesコンポーネントですか?)と一緒に動作しません。ですから、私はh:commandLinkで中継し、ajaxを使用しなければなりません。ポップアップパネルの内容を豊富に送信:popupPanel

ポップアップパネルを開く/レンダリングするリンクが起動したときに、マネージドBeanの関数を呼び出すにはどうすればよいですか?

(このため、正しいパターンは何ですか?)

PS。最初の質問は変更されましたが、ポップアップパネルで値を送信する際の問題はありません。 XHTMLファイルの

パート:ポップアップパネルについて

<h.form> 
... 
<a4j:region> 
     <rich:popupPanel id="popup_sys_user_req" modal="false" autosized="true" resizeable="false"> 
         <f:facet name="header"> 
          <h:outputText value="Request New Sector/Category" /> 
         </f:facet> 
         <f:facet name="controls"> 
          <h:outputLink value="#" 
              onclick="#{rich:component('popup_sys_user_req')}.hide(); return false;"> 
           X 
          </h:outputLink> 
         </f:facet> 
         <h:panelGrid columns="2"> 
          <h:outputLabel value="Request New:" /> 
          <h:selectOneMenu id="sys_req_type" value="#{userController.selectedSysUserRequest.sysrequesttype}" required="true" > 
           <f:selectItems value="#{userController.getSysRequestTypeItems('SECTOR_CATEGORY')}"> 
           </f:selectItems> 
          </h:selectOneMenu> 
          <h:outputLabel value="Description:" /> 
          <h:inputTextarea id="user_req_desc" value="#{userController.selectedSysUserRequest.description(desc)}" required="true" requiredMessage="Decription is missing" /> 
         </h:panelGrid> 
         <a4j:commandButton action="#{userController.CreateSysUserRequest()}" value="Send Request" execute="sys_user_req_form" oncomplete="#{rich:component('popup_sys_user_req')}.hide(); return false;"/> 
        </rich:popupPanel> 
       </a4j:region> 
</h:form> 

のcommandLink(再編集

<h:commandLink actionListener="#{userController.prepareCreateSysRequest}" value="Request New Sector/Category">  
    <f:ajax execute="popup_sys_user_req @this" render="popup_sys_user_req"> 
     <rich:componentControl id="popup_ctr" event="click" target="popup_sys_user_req" operation="show"/> 
    </f:ajax>         
</h:commandLink> 
---------------------------- 
//Managed Bean: 
public void prepareCreateSysRequest(ActionEvent event) { 
    selectedSysUserRequest = new Sysuserrequest(); 
    JsfUtil.log("Prepare Create System User Request"); 
} 

This post continues the dicussion。 グリーティングクリス。

答えて

1

私が正しく理解していれば、someAction1を呼び出すときに、popupPanel内のすべてのフォーム要素をパネルの外側に提出する必要はありませんか? 1. a4jcommandButtonにはlimitToList属性があり、サーバー上のどのコンポーネントを更新するかを指定できます。 2. popupPanelを最初のフォームの外に作成し、独自のフォームを使用します。あなたはRichFacesの4を使用している場合

<h:form> 
... 
<a4j:commandButton action="someAction2"... 
</h:form> 

<rich:popupPanel> 
<h:form> 
... 
<a4j:commandButton action="someAction1"... 
</h:form> 
</rich:popupPanel> 

更新 あなたはlimitRender

+0

richfacesを使用していますが、コマンドボタンのlimitToListはありません。それが地域があるが確信が持てない理由だと思う。 2番目の提案を試みます。ありがとう。 – Chris

+0

フォローアップの質問で、私はexecute = @ formを使って処理を制限しようとしています。ページ上の2番目のフォームですが、他のフォームも送信しようとします。豊かですか:地域は行く道? – Chris

+0

ポップアップパネルを独自のフォームに移動すると、ポップアップパネルのヘッ​​ダーが消えます。 JSFは弱い心のためではないと思いますか? – Chris

1

でlimitToList属性を置き換えることができ、問題はポップアップがJSFでフォームの子ではないということです、あなただけに必要domElementAttachment attribuを使用してくださいそれを変更するには。したがって、あなたのコードは次のようになります:

<h.form> 
... 
<a4j:region> 
     <rich:popupPanel id="popup_sys_user_req" modal="false" autosized="true" resizeable="false" domElementAttachment="form"> 
     <f:facet name="header"> 
... 
関連する問題