user2017741
user2017741

Reputation: 11

a4j:CommandLink action not execute on rich:popupPanel when panel is rendered

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

Answers (7)

Jim
Jim

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

ved raj
ved raj

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

Priyan Chngd
Priyan Chngd

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

Hantsy
Hantsy

Reputation: 9261

  1. it is better to render a inner component id of the popupPane instead of the popupPane id.
  2. In jsf 2, it is better to use only ONE form for one page, the state management is based on the form, I think this is a big design issue in jsf2. Before Richfaces 4.3, two forms will cause some weird problem, I do not know if 4.3 fixed it. MyFaces has its solution to void the multi form problems.

Upvotes: 1

Rodmar Conde
Rodmar Conde

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

the render="myPopupPanel" attribute shouldn't be reRender="myPopupPanel"?

Upvotes: 0

fredcrs
fredcrs

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

Related Questions