1 Reply Latest reply on Dec 6, 2007 7:27 AM by Viggo Navarsete

    Richfaces within Portlet working but NOT Ajax !

    Bjoern B Newbie

      Hey guys !
      I'm running into big trouble ! I'm trying to implement richfaces into portlets within the JBoss portal. I already solved the Servlet.service() error by editing the following src file decribed here https://jsfportletbridge.dev.java.net/nonav/issues/showattachment.cgi/8/crt-issue-20.txt.

      After that all richfaces features are working except the AJAX features !!
      I always get an "A4J not defined" from the IE and the Firefox!
      So i tried the solution which the following thread describes:
      http://jboss.com/index.html?module=bb&op=viewtopic&t=115538&start=10

      But when I'm trying to do this I get the following error message:

      javax.portlet.PortletException: Error processing execute lifecycle

      So I'll post here the configuration of my working Richfaces-Portlet configuration which will get the "A4J not defined" error in hope someone can help me with that.

      Thanks for any kind of input :)

      i'm working with
      jboss portal 2.6.2 GA bundled
      richfaces 3.1.2 GA
      jsf-portlet.jar (With Modified File FacesContextFactoryImpl.java and New File ServletContextHandler.java)
      commons-digester-1.8.jar and commons-beanutils-1.7.0.jar

      My configuration so far is as following:

      index.jsp

      <%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
      <%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
      <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
      <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
      
      <%@ page import="javax.portlet.*"%>
      <%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
      
      <portlet:defineObjects />
      <f:view>
       <rich:separator height="1" style="10px 0"/>
       <h:panelGrid columns="2" width="100%" columnClasses="col">
       <h:panelGroup>
       This code does not work as expected. The expected echo text does not appear
       below even the condition for <code>'renderer'</code> returns <code>true</code>.
       Also, the error message does not appear when the length of the text reaches the limit.
       </h:panelGroup>
       <h:panelGroup>
       This code works properly. The <code>h:message</code> is marked for update during
       each Ajaxrequest/response. The place for bottom label is reserved with
       <code>outputPanel</code> while the component is not rendered.
       </h:panelGroup>
       <a4j:outputPanel layout="block">
       <h:message for="text1" style="color:red" />
       <a4j:outputPanel layout="block">
       <h:form>
       <h:outputText value="Enter Text:"/>
       <h:inputText id="text1" label="text1" value="#{rsBean.text1}">
       <f:validateLength maximum="10"/>
       <a4j:support event="onkeyup" reRender="out1" />
       </h:inputText>
       </h:form>
       </a4j:outputPanel>
       <h:outputText id="out1" rendered="#{not empty rsBean.text1}" value="Approved Text: #{rsBean.text2}" />
       </a4j:outputPanel>
       <a4j:outputPanel layout="block">
       <a4j:outputPanel ajaxRendered="true">
       <h:message for="text2" style="color:red" />
       </a4j:outputPanel>
       <a4j:outputPanel layout="block">
       <h:form>
       <h:outputText value="Enter Text:"/>
       <h:inputText id="text2" label="text1" value="#{rsBean.text2}">
       <f:validateLength maximum="10"/>
       <a4j:support event="onkeyup" reRender="out2" />
       </h:inputText>
       </h:form>
       </a4j:outputPanel>
       <a4j:outputPanel layout="none">
       <h:outputText id="out2" rendered="#{not empty rsBean.text2}" value="Approved Text: #{rsBean.text2}" />
       </a4j:outputPanel>
       </a4j:outputPanel>
       </h:panelGrid>
       <rich:separator height="1" style="10px 0"/>
      </f:view>
      


      rsBean.java
      package de.sschmeckt.data;
      
      public class rsBean
      {
       public String text1;
       public String text2;
      
       public String getText1(){
       return text1;
       }
       public void setText1(String _text1){
       text1=_text1;
       }
      
       public String getText2(){
       return text2;
       }
       public void setText2(String _text2){
       text2=_text2;
       }
      
      }
      


      faces-config.xml
      <?xml version='1.0' encoding='UTF-8'?>
      
      <faces-config version="1.2"
       xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
      
       <managed-bean>
      
      <managed-bean-name>rsBean</managed-bean-name>
      <managed-bean-class>de.sschmeckt.data.rsBean</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
      
       </managed-bean>
      </faces-config>
      


      portlet.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
       version="1.0">
       <portlet>
       <description>HelloWorldPortlet</description>
       <portlet-name>HelloWorldPortlet</portlet-name>
       <display-name>HelloWorldPortlet</display-name>
       <portlet-class>com.sun.faces.portlet.FacesPortlet</portlet-class>
       <init-param>
       <description>Portlet init view page</description>
       <name>com.sun.faces.portlet.INIT_VIEW</name>
       <value>/WEB-INF/jsp/index.jsp</value>
       </init-param>
       <expiration-cache>0</expiration-cache>
       <supports>
       <mime-type>text/html</mime-type>
       <portlet-mode>VIEW</portlet-mode>
       </supports>
       <portlet-info>
       <title>HelloWorld Portlet</title>
       <short-title>HelloWorldPortlet</short-title>
       </portlet-info>
       </portlet>
      </portlet-app>
      


      web.xml
      <?xml version="1.0"?>
       <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
       <display-name>a4jEchoText</display-name>
       <context-param>
       <param-name>org.richfaces.SKIN</param-name>
       <param-value>blueSky</param-value>
       </context-param>
       <context-param>
       <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
       <param-value>server</param-value>
       </context-param>
       <filter>
       <display-name>RichFaces Filter</display-name>
       <filter-name>richfaces</filter-name>
       <filter-class>org.ajax4jsf.Filter</filter-class>
       </filter>
       <filter-mapping>
       <filter-name>richfaces</filter-name>
       <servlet-name>Faces Servlet</servlet-name>
       <dispatcher>REQUEST</dispatcher>
       <dispatcher>FORWARD</dispatcher>
       <dispatcher>INCLUDE</dispatcher>
       </filter-mapping>
       <servlet>
       <servlet-name>Faces Servlet</servlet-name>
       <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
       </servlet>
       <servlet-mapping>
       <servlet-name>Faces Servlet</servlet-name>
       <url-pattern>*.jsf</url-pattern>
       </servlet-mapping>
       <login-config>
       <auth-method>BASIC</auth-method>
       </login-config>
       </web-app>