我有链接打开弹出面板,在打开该面板之前我想要从我的ejb无状态bean执行一些操作,并且应该渲染弹出面板。打开该面板后,我单击commandButton,它应该从我的bean执行操作并关闭该面板。第二个动作没有执行。
如果我从第一个a4j删除'render'属性:commandLink一切正常。
我用过: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");
}
}
答案 0 :(得分:1)
答案 1 :(得分: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
尝试一下,让我知道
答案 2 :(得分:0)
我从不使用富有的面孔,只使用素面。但我会尝试猜测你试图在onComplete方法上访问的组件需要在commandButton的相同形式内。同时检查来自http的POST回复,他们通常会带有错误消息,其中包含有关错误的信息
答案 3 :(得分:0)
render =“myPopupPanel”属性不应该是reRender =“myPopupPanel”?
答案 4 :(得分: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>
当我们使用富脸时,通常最好只有一个表单元素...
此致
答案 5 :(得分:0)
答案 6 :(得分:0)
a4j:commandLink没有任何属性作为渲染,我想你拼错了它。呈现属性名称。
<a4j:commandLink action="#{myBean.init()}" rendered="myPopupPanel" oncomplete="#{rich:component('myPopupPanel')}.show(); return false;"> Open panel </a4j:commandLink>