1

ポップアップ パネルを開くリンクがあります。そのパネルを開く前に、ejb ステートレス Bean から何らかのアクションを実行し、ポップアップ パネルをレンダリングする必要があります。そのパネルを開いた後、Bean からアクションを実行してそのパネルを閉じる commandButton をクリックします。2 番目のアクションは実行されません。

最初の a4j:commandLink から「render」属性を削除すると、すべて問題ありません。

私が使用したのは、Richfaces 4.1.0.Final (4.2.3.Final と最新のものも試しました: 4.3.0.20121214-M3)、Seam 3.1.0.Final、JBoss 7.1.1.Final です。

my_page.xhtml:

    <html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:s="http://jboss.org/seam/faces"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich">

<h:head></h:head>
<h:body>
    <h:form>
        <a4j:commandLink action="#{myBean.init()}" render="myPopupPanel"
            oncomplete="#{rich:component('myPopupPanel')}.show(); return false;">
            Open panel
        </a4j:commandLink>
    </h:form>

    <rich:popupPanel id="myPopupPanel" modal="false" autosized="true"
        resizeable="false">
        <h:form id="deviceInputEditForm">

            <a4j:commandButton action="#{myBean.doAction()}" value="DoAction"
                oncomplete="#{rich:component('myPopupPanel')}.hide();" />

        </h:form>
    </rich:popupPanel>
</h:body>
</html>

MyBean.java:

package com.hajdi.test;

import javax.ejb.Stateless;
import javax.inject.Named;

@Named
@Stateless
public class MyBean {
   public void init() {
      System.out.println("Init called.");
   }

   public void doAction() {
      System.out.println("doAction called");
   }
}
4

7 に答える 7

1

次のようなポップアップパネルでアンダーフォームを作成できます

<rich:popupPanel id="myPopupPanel" modal="false" autosized="true"
        resizeable="false">
        <h:form id="deviceInputEditForm">
           <s:div id="anythingyouwant>"
            <a4j:commandButton action="#{myBean.doAction()}" value="DoAction"
                oncomplete="#{rich:component('myPopupPanel')}.hide();" />
            </s:div>
        </h:form>
    </rich:popupPanel>

そして、最初のいいねからそれを再レンダリングしてみてください

<h:form>
        <a4j:commandLink action="#{myBean.init()}" render="anythingyouwant"
            oncomplete="#{rich:component('myPopupPanel')}.show(); return false;">
            Open panel
        </a4j:commandLink>
    </h:form>
enter code here

試してみて、ここで教えてください

于 2014-11-21T09:44:19.617 に答える
0

render="myPopupPanel" 属性は reRender="myPopupPanel" であってはなりませんか?

于 2013-01-31T17:01:36.583 に答える
0

私はリッチフェイスを使用したことはなく、プライムフェイスのみを使用しました。しかし、onComplete メソッドでアクセスしようとしているコンポーネントは、commandButton と同じフォーム内にある必要があると推測します。また、http からの POST 応答も確認してください。通常、何が問題なのかに関する情報を含むエラー メッセージが表示されます。

于 2013-01-28T17:12:51.283 に答える
0

a4j:commandLink には render としての属性がありません。スペルが間違っていると思います。属性名がレンダリングされます。

<a4j:commandLink action="#{myBean.init()}" rendered="myPopupPanel" oncomplete="#{rich:component('myPopupPanel')}.show(); return false;"> Open panel </a4j:commandLink>

于 2014-09-13T10:13:52.160 に答える
0

試してみることをお勧めします:

<h:body>
    <h:form>
        <a4j:commandLink action="#{myBean.init()}" render="myPopupPanel"
            oncomplete="#{rich:component('myPopupPanel')}.show(); return false;">
            Open panel
        </a4j:commandLink>

    <rich:popupPanel id="myPopupPanel" modal="false" autosized="true"
        resizeable="false">
            <a4j:commandButton action="#{myBean.doAction()}" value="DoAction"
                oncomplete="#{rich:component('myPopupPanel')}.hide();" />
    </rich:popupPanel>

    </h:form>
</h:body>

通常、リッチ フェイスを使用する場合は、フォーム要素を1 つだけにする方が適切です...

よろしく

于 2013-02-06T09:31:26.840 に答える