1

我有打开弹出面板的链接,在打开该面板之前,我希望从我的 ejb 无状态 bean 执行一些操作,并且应该呈现弹出面板。打开该面板后,我单击命令按钮,它应该从我的 bean 执行操作并关闭该面板。不执行第二个动作。

如果我从第一个 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 回答
1
  1. 最好呈现 popupPane 的内部组件 id 而不是 popupPane id。
  2. 在jsf 2中,最好一页只使用ONE表单,状态管理是基于表单的,我认为这是jsf2中一个很大的设计问题。在 Richfaces 4.3 之前,有两种形式会导致一些奇怪的问题,不知道 4.3 有没有解决。MyFaces 有解决多表单问题的方法。
于 2013-04-27T09:57:17.733 回答
0

我从不使用富面,只使用素面。但我会尝试猜测您尝试在 onComplete 方法上访问的组件需要与 commandButton 相同的形式。还要检查来自 http 的 POST 回复,他们通常会带来错误消息,其中包含错误信息

于 2013-01-28T17:12:51.283 回答
0

a4j:commandLink 没有任何属性作为渲染,我想你拼错了。呈现属性名称。

<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

https://stackoverflow.com/a/6908500/3583985

尝试使用上面的链接。它也对我的问题进行了排序..我面临同样的问题

添加区域标签,一切正常

谢谢

于 2014-05-05T05:28:14.833 回答
0

render="myPopupPanel" 属性不应该是 reRender="myPopupPanel" 吗?

于 2013-01-31T17:01:36.583 回答
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>

当我们使用丰富的面孔时,通常最好只有一个表单元素......

问候

于 2013-02-06T09:31:26.840 回答