javax.el.PropertyNotFoundException
tkuchheuser Dec 28, 2007 7:32 AMHello everyone,
i've got a problem with some code (mainly copied from the booking example).
I use Jboss AS 4.2.2 with SEAM 2.0.0.
The Booking-Example works fine.
However my own page pr_overview.xhtml:
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich" template="layout/template.xhtml" xmlns:a4j="http://richfaces.org/a4j"> <ui:define name="body"> <h:messages globalOnly="true" styleClass="message" /> <br /> <rich:panel> <f:facet name="header">Probandenübersicht</f:facet> <rich:panel> <h:form id="searchCriteria"> <h:panelGrid columns="4"> <h:outputText value="Name: " /> <h:inputText id="searchStringName" value="#{subjectSearch.searchString}" /> <a4j:commandButton value="Suche" id="findSubjects" action="#{subjectSearch.runQuery}" reRender="searchResults" /> </h:panelGrid> </h:form> </rich:panel>
with the backing bean:
import java.util.List; import javax.ejb.Remove; import javax.ejb.Stateful; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Destroy; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.datamodel.DataModel; import de.itecra.pdb.model.Proband; @Stateful @Name("subjectSearch") @Scope(ScopeType.SESSION) public class SubjectSearchAction implements SubjectSearch { @Logger("SubjectSearch") org.jboss.seam.log.Log log; @PersistenceContext private EntityManager em; @DataModel private List<Proband> listSubjectsResults; /** SEARCH FIELDS */ private String searchString; /** METHODS */ public void runQuery() { listSubjectsResults = em.createQuery("FROM Proband").getResultList(); log.info("RunQuery"); } /** GETTERS AND SETTERS */ public String getSearchString() { return searchString; } public void setSearchString(String searchString) { this.searchString = searchString; } /** COMMON METHODS */ @Remove @Destroy public void destroy() { } }
throws the exception:
javax.faces.FacesException: javax.el.PropertyNotFoundException: /pr_overview.xhtml @23,48 value="#{subjectSearch.searchString}": Property 'searchString' not found on type org.javassist.tmp.java.lang.Object_$$_javassist_0
at javax.faces.component.UIOutput.getValue(UIOutput.java:176)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:189)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:320)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:200)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:836)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:279)
at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:242)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:282)
at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:199)
at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:194)
at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:121)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:282)
at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:199)
at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:194)
at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:121)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
[...]
However using the runQuery() Method and accesing listSubjectResults works fine:
<a4j:commandButton value="Suche" id="findSubjects" action="#{subjectSearch.runQuery}" reRender="searchResults" />
<a4j:outputPanel id="searchResults"> <rich:dataTable id="subjects" value="#{listSubjectsResults}" var="subject" rendered="#{listSubjectsResults.size>0}"> <rich:column> <f:facet name="header">Nachname</f:facet> #{subject.nachname} </rich:column> <rich:column> <f:facet name="header">Vorname</f:facet> #{subject.vorname} </rich:column> <rich:column> <f:facet name="header">Geburtsdatum</f:facet> <h:outputText value="#{subject.geburtsdatum}"> <s:convertDateTime pattern="DD.MM.yyyy" /> </h:outputText> </rich:column> <rich:column> <f:facet name="header">Identifikation</f:facet> #{subject.code_zahl} </rich:column> <rich:column> <f:facet name="header">Aktion</f:facet> <s:link value="Öffnen" id="openSubject" /> <!-- <s:link value="Untersuchung" /> <s:link value="Studie" /> --> </rich:column> </rich:dataTable> </a4j:outputPanel>
Idea anyone?
Thanks for advice or links.
Timo