Reputation: 11
I have link that opens popup panel, before opening that panel I would like some action to be executed from my ejb stateless bean and popup panel should be rendered. After opened that panel I click commandButton which should execute action from my bean and close that panel. Second action is not executed.
If I remove 'render' attribute from first a4j:commandLink everything is ok.
I used: Richfaces 4.1.0.Final (I also tried 4.2.3.Final and the newest: 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");
}
}
Upvotes: 1
Views: 6965
Reputation: 11
You can create an under form in popup panel like
<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>
And then try to re render that from your first like
<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
give it a try and let me know here
Upvotes: 1
Reputation: 33
a4j:commandLink doesn't have any attribute as render, i think you misspelled it. The attribute name is rendered.
<a4j:commandLink action="#{myBean.init()}" rendered="myPopupPanel" oncomplete="#{rich:component('myPopupPanel')}.show(); return false;"> Open panel </a4j:commandLink>
Upvotes: 0
Reputation: 21
https://stackoverflow.com/a/6908500/3583985
Try with above link.its sorted my question too.. same problem faced by me
add region tags and all are works well
thanks
Upvotes: 0
Reputation: 9261
Upvotes: 1
Reputation: 956
I suggest to try:
<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>
It is usually better to have only one form element when we use rich faces...
Regards
Upvotes: 0
Reputation: 58
the render="myPopupPanel" attribute shouldn't be reRender="myPopupPanel"?
Upvotes: 0
Reputation: 3621
I never used rich faces, only prime faces. But I will try to guess the component you are trying to access on onComplete method needs to be inside the same form the commandButton is. Also check the POST reply from http they usually bring error messages with information on whats wrong
Upvotes: 0