Reputation: 11
When I run this code it gives me the following exception:
com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException SCHWERWIEGEND: Error Rendering View[/index.xhtml] java.lang.ClassCastException: Text cannot be cast to java.lang.String.
I am using Primefaces 5.0 and JSF 2.2
index.xhtml
<body>
<h:form>
<h:panelGrid columns="2" cellpadding="5">
<p:outputLabel value="Simple:" for="acSimple" />
<p:autoComplete id="acSimple" value="#{autoCompleteView.txt}"
completeMethod="#{autoCompleteView.completeText}" var="t" itemValue="#{t}"
itemLabel="#{t.query}" converter="#{TextConverter}">
<f:facet name="itemtip">
<h:panelGrid columns="2" cellpadding="5">
<span>Hello</span>
<h:outputText value="#{t.query}" />
<h:outputText value="#{t.id}" />
</h:panelGrid>
</f:facet>
</p:autoComplete>
</h:panelGrid>
</h:form>
</body>
Text.java
public class Text {
private String id;
private String query;
public String getId() {
return this.id;
}
public Text(final String id, final String query) {
this.id = id;
this.query = query;
}
public Text() {
this.id = "";
this.query = "";
}
public String setId(final String id) {
return this.id = id;
}
public String getQuery() {
return this.query;
}
public String setQuery(final String query) {
return this.query = query;
}
@Override
public String toString() {
return this.query;
}
}
TextConverter.java
@FacesConverter("TextConverter")
public class TextConverter implements Converter {
@ManagedProperty(value = "#{autoCompleteView}")
private AutoCompleteView A;
@Override
public Object getAsObject(final FacesContext context, final UIComponent component, final String value) {
for (final Text t : this.A.getResults()) {
if (t.getId().equals(value)) {
return t;
}
}
return null;
}
@Override
public String getAsString(final FacesContext context, final UIComponent component, final Object value) {
// TODO Auto-generated method stub
if (value instanceof Text) {
final Text t = (Text) value;
return t.toString();
}
return "";
}
}
AutoCompleteView.java
@ManagedBean
@SessionScoped
public class AutoCompleteView {
private String txt;
private List<Text> Texts;
private Text t = null;
private List<Text> results;
public List<Text> getTexts() {
return this.Texts;
}
public void setTexts(final List<Text> texts) {
this.Texts = texts;
}
public List<Text> completeText(final String txt) {
this.results = new ArrayList<>();
for (int i = 0; i < 10; i++) {
final String id = "" + i;
final String s = txt + i;
this.t = new Text(id, s);
System.out.println(this.t);
this.results.add(this.t);
}
return this.results;
}
public String getTxt() {
return this.txt;
}
public void setTxt1(final String txt) {
this.txt = txt;
}
public List<Text> getResults() {
return this.results;
}
public void setResults(final List<Text> results) {
this.results = results;
}
}
Error
com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
SCHWERWIEGEND: Error Rendering View[/index.xhtml]
java.lang.ClassCastException: Text cannot be cast to java.lang.String
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeSuggestionsAsList(AutoCompleteRenderer.java:497)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeSuggestions(AutoCompleteRenderer.java:393)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeResults(AutoCompleteRenderer.java:123)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeEnd(AutoCompleteRenderer.java:105)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:559)
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1689)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIForm.visitTree(UIForm.java:371)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:399)
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:319)
at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60)
at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:1004)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:417)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Jul 28, 2015 5:13:50 PM org.apache.catalina.core.StandardWrapperValve invoke
SCHWERWIEGEND: Servlet.service() for servlet [Faces Servlet] in context with path [/AutocompleteObject] threw exception
java.lang.IllegalStateException: CDATA tags may not nest
at com.sun.faces.renderkit.html_basic.HtmlResponseWriter.startCDATA(HtmlResponseWriter.java:681)
at javax.faces.context.ResponseWriterWrapper.startCDATA(ResponseWriterWrapper.java:179)
at javax.faces.context.PartialResponseWriter.startError(PartialResponseWriter.java:341)
at org.primefaces.context.PrimePartialResponseWriter.startError(PrimePartialResponseWriter.java:174)
at com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError(AjaxExceptionHandlerImpl.java:200)
at com.sun.faces.context.AjaxExceptionHandlerImpl.handle(AjaxExceptionHandlerImpl.java:124)
at javax.faces.context.ExceptionHandlerWrapper.handle(ExceptionHandlerWrapper.java:100)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Upvotes: 1
Views: 2182
Reputation: 4940
Your converter is bound to an EL expression. Change the part with the converter to: converter="TextConverter"
and it will work.
NOTE:
If your Converter
isn't annotated with @FacesConverter
, then you have to use the EL-expression: converter="#{textConverter}"
in your facelet!
If you run into troubles by using any PrimeFaces component you should always refer to the PrimeFaces-ShowCase. Most of the time the mistake is trivial.
Upvotes: 2