Skip to Main Content

Java EE (Java Enterprise Edition) General Discussion

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

Portlets And Ajax

843844Aug 21 2008
Hi all,

I am new to Portlets and Ajax4Java.

In a bean I put a code like this...

request.getPortletSession().setAttribute("usersettings", settingsBean);

and in the page i have,
<a4j:portlet
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:a4j="https://ajax4jsf.dev.java.net/ajax">

	<f:view>
		<h:form>
	    	<div align="center">
				<h:panelGrid id="panel" columns="2" align="center" border="0" styleClass="specBody">
					<h:outputText value="Please select a news category: " />
					<a4j:region  selfRendered="true" ajaxListener="#{usersettings.processCategoryChange}" id="Region">
						<h:selectOneMenu id="categoryList" value="#{usersettings.selectedCategory}">
							<!-- 
							<a4j:ajaxListener type="org.ajax4jsf.ajax.ForceRender" event="onchange" 
									actionListener="#{usersettings.processCategoryChange}" reRender="channelList"></a4j:ajaxListener>
							<a4j:support actionListener="#{usersettings.processCategoryChange}" event="onchange" reRender="channelList" />
							 -->
							<f:selectItems value="#{usersettings.categoryNames}" />
							<a4j:support action="#{usersettings.processCategoryChange}" event="onchange" reRender="channelList"/>
						</h:selectOneMenu>
					</a4j:region>
					<h:outputText id="channel" value="Please select channels: " style="width:30"/>
					<h:selectManyListbox id="channelList" value="#{usersettings.selectedFields}" size="5" >
						<f:selectItems value="#{usersettings.fields}" />
					</h:selectManyListbox>
					<br />
					<f:facet name="footer">
				        <h:panelGroup style="align: right">
				           	<a4j:commandButton id="cButton" value="Update" reRender="output" 
				           			actionListener="#{usersettings.processUpdate}" style="align: right"/>
				        </h:panelGroup>
				    </f:facet>
				</h:panelGrid>
			</div>
		</h:form>
	</f:view>
</a4j:portlet>
In the bean to the process AjaxEvent,
public void processCategoryChange(AjaxEvent e) {
		String value = (String) e.getSource();
		this.getFields().clear();
		for (Iterator itr = this.getNewsCategories().listIterator(); itr.hasNext();) {
			NewsCategory category = (NewsCategory) itr.next();
			if (category.getName().equals(value)) {
				for (Iterator iter = category.getFields().iterator(); iter.hasNext();) {
					NewsField field = (NewsField) iter.next();
					this.getFields().add(field.getName());
				}
			}
		}
	}
and I'm getting an exception...

18:16:41,343 WARN [MyFacesResourceLoader] Unparsable lastModified : @lastModified@
18:16:42,015 WARN [LoadContexts] fail-safe cleanup (collections) : org.hibernate.engine.loading.CollectionLoadContext@1a349b9<rs=com.mysql.jdbc.ResultSet@77b81f>
18:16:42,015 WARN [LoadContexts] fail-safe cleanup (collections) : org.hibernate.engine.loading.CollectionLoadContext@13d16a7<rs=com.mysql.jdbc.ResultSet@9e9dbe>
18:16:42,015 WARN [LoadContexts] fail-safe cleanup (collections) : org.hibernate.engine.loading.CollectionLoadContext@19a34bb<rs=com.mysql.jdbc.ResultSet@12a4cb3>
18:16:42,015 WARN [LoadContexts] fail-safe cleanup (collections) : org.hibernate.engine.loading.CollectionLoadContext@fbf446<rs=com.mysql.jdbc.ResultSet@1cc4318>
18:16:42,015 WARN [LoadContexts] fail-safe cleanup (collections) : org.hibernate.engine.loading.CollectionLoadContext@16237c3<rs=com.mysql.jdbc.ResultSet@a1c1ee>
18:16:58,250 ERROR [PhaseListenerManager] Exception in PhaseListener RESTORE_VIEW(1) afterPhase
javax.faces.FacesException: Prefix for attributes in portlet session scope not found
at org.ajax4jsf.portlet.context.ServletContextImpl.getSessionPrefix(ServletContextImpl.java:212)
at org.ajax4jsf.portlet.context.ServletContextImpl.getSessionAttribute(ServletContextImpl.java:219)
at org.ajax4jsf.portlet.context.AbstractExternalContext$8.getAttribute(AbstractExternalContext.java:459)
at org.ajax4jsf.portlet.context.ContextAttributesMap.get(ContextAttributesMap.java:18)
at org.apache.myfaces.el.VariableResolverImpl.resolveVariable(VariableResolverImpl.java:281)
at org.ajax4jsf.framework.ajax.AjaxContext.getCurrentInstance(AjaxContext.java:154)
at org.ajax4jsf.framework.renderer.AjaxPhaseListener.afterPhase(AjaxPhaseListener.java:76)
at org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersAfter(PhaseListenerManager.java:92)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:99)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:127)
at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:277)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Unknown Source)
18:16:58,265 ERROR [PhaseListenerManager] Exception in PhaseListener RESTORE_VIEW(1) afterPhase


can anyone help me?
thanks,
Anoop

Comments

843841
http://tomcat.apache.org/tomcat-5.5-doc/appdev/deployment.html

1: web-inf needs to capitalized as WEB-INF

2: The compiled class file for MyServlet should be under WEB-INF/classes/servlets

3: The web.xml reference to the MyServlet class file should be:

<servlet-class>servlets.MyServlet</servlet-class>
843841
yes I have the web-inf capitalized. But I believe that in the
web.xml we can use the slash syntax
<servlet-class>servlets/MyServlet</servlet-class> 
I have use it in the past with success.
Nevertheless thank you for your answer but you haven't replied to the basic one?
It is allowed to place web-inf inside another folder right?such as folder web?
843841
Well did you read the tomcat documentation on web application directory structure in the link?
843841
Yes I've read it and all I am saying is that in previous applications I used the slash syntax and I think it worked.But that is not my problem here.All I am asking is why when I removed the web folder and the root folder below webapps was WEB-INF then the application worked.What was I doing wrong(if it was just the slashes it would not work in any case).
843841
http://www.roguewave.com/support/docs/leif/leif/html/servletug/7-7.html#771

http://www.coreservlets.com/Apache-Tomcat-Tutorial/

http://www.onjava.com/pub/a/onjava/2001/03/15/tomcat.html

http://www.tek271.com/articles/deploying_servlets_on_tomcat.html

http://www.onjava.com/pub/a/onjava/2001/04/19/tomcat.html?page=4

Every example listed uses a period delimited class name. Not one mentions being able to use a slash deliminted class name.
843841
Ok I do not disagree but my initial question was if it is ok to use a folder where WEB-INF is stored.Because in my example when I enclosed folder WEB-INF in folder web I had the forementioned problem when I removed folder web and the folder WEB-INF was in the root of the folder webapps of Tomcat things were ok.And so I am asking why this was happening??Forget about the slalshes I accept that slashes is the correct way for web.xml.
843841
The WEB-INF folder has to directly under the web application root directory. Any other WEB-INF folders will be ignored.
843841
Ok thank you very much for your help.
1 - 8
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Sep 18 2008
Added on Aug 21 2008
0 comments
126 views