Olá,
To com uma dúvida, tenho componentes que são renderizados somente atendendo a um certo critério. O problema que notei quando uso o rendered é que os valores não são recuperados na Action.
Tipo, tenho um select:
<h:selectOneMenu
id="planId"
style="width:219px"
required="true"
rendered="#{empty affiliation.code}"
onchange="findPlanById(this.value)"
value="#{plan.id}">
<f:selectItem itemValue="" itemLabel="Selecione..." />
<f:selectItems value="#{accountAction.availablePlans}" />
</h:selectOneMenu>
O problema é que quando eu vou chamar um método o valor de “plan.id” vem null mas se eu tiro o “rendered” ele vem certo. Porque esse comportamento do JSF? Eu solucionei isso usando o style display none, mas não acho a melhor solução visto que o html é gerado sempre.
Obrigado.
Esse é o comportamento padrão, rendered quer dizer renderizado ou seja, se o parser do JSF vai trasformar aquela determinada Taglib em uma tag HTML padrão, se ele não é renderizado ele não existe na árvore.
Não entendo o porquê de você não renderizá-lo e mesmo assim querer o valor?!
Imaginei que fosse por questão comportamental.
Na verdade eu não quero o valor do componente quando ele não for renderizado mas sim quando ele for renderizado. É somente neste momento que necessito do valor. Mas mesmo assim ele não vem, mesmo quando renderizado o valor do campo não vem. Achei estranho esse comportamento, pois a partir do momento que ele é criado no html ele não deveria existir na árvore?
Ok, os options são gerados no HTML certinho?! Dê uma olhada no HTML, como você populou a lista
accountAction.availablePlans
Outra coisa que me chamou a atenção, o que esse método faz findPlanById(this.value)!!!
Thiago,
são gerados certos sim.
Esse evento ai é um @WebRemote que faço. Na verdade ao selecionar a combo ele busca detalhes sobre o item selecionado. Por isso esse “onchange” ai.
Método que monta meu select.
public List<SelectItem> getAvailablePlans() {
List<Map> result = em.createQuery("//select").getResultList();
if (!result.isEmpty()) {
List<SelectItem> plans = new ArrayList<SelectItem>(result.size());
for (Map map : result) {
plans.add(new SelectItem(map.get("id"), (String) map.get("name")));
}
return plans;
}
return new ArrayList<SelectItem>(0);
}
Certo, tente dar uma olhada no richfaces que ele possui a implementação ajax para JSF (se for o caso), mas como você chama esse WebService?! Como você passa o parâmetro?!
Se você quer passar o valor selecionado via JS você deve fazer
Na tua página faça
Thiago,
Na verdade o método que traz os detalhes do item selecionado funciona normalmente. A função javascript que uso ai é essa:
function findPlanById(id){
if(id != '') {
var affiliationAction = Seam.Component.getInstance("affiliationAction");
affiliationAction.findPlanById(id, _cb, _exceptionHandler);
} else {
_cb({description : '', price : ''});
}
}
function _cb(plan){
jq("span:[id$='planValue']").text(plan.price);
jq("textarea[id$='planDescription']").val(plan.description);
}
Isso funciona de boa. O único problema é que quando eu chamo o seguinte método:
<a4j:commandButton
value="#{affiliation.id == null ? messages['view.registerNew'] : messages['view.saveChanges']}"
action="#{affiliationAction.save(affiliation, plan)}"/>
Lá no método “save” da minha action o parâmetro “plan” chega com id null. Mas isso só quando eu tenho o atributo “rendered” no “<h:selectOneMenu”. Quando não tenho esse atributo, o valor chega tranquilo la.
Tem um artigo, acredito que no site do myfaces sobre como trabalhar com o atributo rendered e ajax 4 jsf pode ser esse o problema, dá uma vasculhada no wiki deles! Se eu achar o artigo eu posto aqui o link!
Ok amigo talvez não faça parte da discussão o que eu vou falar mas vai a dica:
Ao invés de criar um método que retorne uma lista de SelectItem, faça com que o método retorne a lista de objetos e na página JSP utilize as tags do Seam para que ele mesmo converta o valor selecionado em um objeto.
<h:selectOneMenu
id="planId"
style="width:219px"
required="true"
rendered="#{empty affiliation.code}"
onchange="findPlanById(this.value)"
value="#{plan.id}">
<f:selectItem itemValue="" itemLabel="Selecione..." />
<s:selectItems value="#{listAvailablePlans}" var="item" itemLabel="#{item.name}" />
<s<convertEntity />
</h:selectOneMenu>
[quote=rimolive]Ok amigo talvez não faça parte da discussão o que eu vou falar mas vai a dica:
Ao invés de criar um método que retorne uma lista de SelectItem, faça com que o método retorne a lista de objetos e na página JSP utilize as tags do Seam para que ele mesmo converta o valor selecionado em um objeto.
<h:selectOneMenu
id="planId"
style="width:219px"
required="true"
rendered="#{empty affiliation.code}"
onchange="findPlanById(this.value)"
value="#{plan.id}">
<f:selectItem itemValue="" itemLabel="Selecione..." />
<s:selectItems value="#{listAvailablePlans}" var="item" itemLabel="#{item.name}" />
<s<convertEntity />
</h:selectOneMenu>
[/quote]
Tu fala então pra mim deixar esse “listAvailablePlans” como Factory no meu Seam Beam? Eu tinha feito isso mas depois comecei a achar estranho pois esse factory era chamado duas ou três vezes a cada requisição e eu não entendi o porquê disso. Dai implementei da forma como está atualmente.
Sabes o porquê desse comportamento?
Use a anotação @Create, pois ela executa o método ao criar o componente Seam.
[quote=rimolive]Ok amigo talvez não faça parte da discussão o que eu vou falar mas vai a dica:
Ao invés de criar um método que retorne uma lista de SelectItem, faça com que o método retorne a lista de objetos e na página JSP utilize as tags do Seam para que ele mesmo converta o valor selecionado em um objeto.
<h:selectOneMenu
id="planId"
style="width:219px"
required="true"
rendered="#{empty affiliation.code}"
onchange="findPlanById(this.value)"
value="#{plan.id}">
<f:selectItem itemValue="" itemLabel="Selecione..." />
<s:selectItems value="#{listAvailablePlans}" var="item" itemLabel="#{item.name}" />
<s<convertEntity />
</h:selectOneMenu>
[/quote]
Estranho, mudei para o código abaixo e agora esta dando um erro.
<s:selectItems
value="#{slctAvailablePlans}"
var="p"
itemLabel="#{p.name}"
itemValue="#{p.id}"
noSelectionLabel="Selecione..."/>
<s:convertEntity/>
@Name("planAction")
@Scope(ScopeType.EVENT)
public class PlanAction {
@Factory("slctAvailablePlans")
public List<Plan> factorySlctAvailablePlans() {
return planService.findAvailables();
}
Erro:
org.jboss.seam.Entity$NotEntityException: Not an entity class: java.lang.Long
at org.jboss.seam.Entity.forClass(Entity.java:159)
at org.jboss.seam.Entity.forBean(Entity.java:145)
at org.jboss.seam.persistence.PersistenceProvider.getId(PersistenceProvider.java:139)
at org.jboss.seam.persistence.HibernatePersistenceProvider.getId(HibernatePersistenceProvider.java:191)
at org.jboss.seam.framework.EntityIdentifier.<init>(EntityIdentifier.java:13)
at org.jboss.seam.ui.JpaEntityLoader.createIdentifier(JpaEntityLoader.java:29)
at org.jboss.seam.ui.AbstractEntityLoader.put(AbstractEntityLoader.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:32)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
at org.jboss.seam.transaction.TransactionInterceptor$1.work(TransactionInterceptor.java:97)
at org.jboss.seam.util.Work.workInTransaction(Work.java:47)
at org.jboss.seam.transaction.TransactionInterceptor.aroundInvoke(TransactionInterceptor.java:91)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:185)
at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:103)
at org.jboss.seam.ui.JpaEntityLoader_$$_javassist_seam_9.put(JpaEntityLoader_$$_javassist_seam_9.java)
at org.jboss.seam.ui.EntityConverter.getAsString(EntityConverter.java:65)
at org.jboss.seam.ui.converter.PrioritizableConverter.getAsString(PrioritizableConverter.java:67)
at org.jboss.seam.ui.converter.ConverterChain.getAsString(ConverterChain.java:126)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:448)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:480)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:772)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:832)
at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:280)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
at org.jboss.seam.ui.util.cdk.RendererBase.renderChild(RendererBase.java:190)
at org.jboss.seam.ui.util.cdk.RendererBase.renderChildren(RendererBase.java:166)
at org.jboss.seam.ui.renderkit.ValidateAllRendererBase.doEncodeChildren(ValidateAllRendererBase.java:33)
at org.jboss.seam.ui.util.cdk.RendererBase.encodeChildren(RendererBase.java:92)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at org.jboss.seam.web.RewriteFilter.process(RewriteFilter.java:98)
at org.jboss.seam.web.RewriteFilter.doFilter(RewriteFilter.java:57)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73)
at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
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:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
@Entity
@Name("plan")
public class Plan extends EntityBase {
@Column(name = "name", nullable = false, length = 30)
@NotNull
@NotEmpty
@Length(max = 30)
private String name;
@Column(name = "description", nullable = false, length = 200)
@NotNull
@NotEmpty
@Length(max = 200)
private String description;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "register", nullable = false, length = 19)
@NotNull
private Date register;
@Column(name = "days_to_use", nullable = false)
@NotNull
private int daysToUse;
@Column(name = "operative", nullable = false, length = 1)
@NotNull
private Character operative;
@Column(name = "TYPE", nullable = false, length = 2)
@NotNull
private String type;
@Column(name = "PRICE")
private BigDecimal price;
@Column(name = "DAYS_FREE")
private Long daysFree;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "plan")
private List<AffiliationPlan> userPlans = new ArrayList<AffiliationPlan>(0);
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return this.description;
}
public void setDescription(String description) {
this.description = description;
}
public Date getRegister() {
return this.register;
}
public void setRegister(Date register) {
this.register = register;
}
public int getDaysToUse() {
return this.daysToUse;
}
public void setDaysToUse(int daysToUse) {
this.daysToUse = daysToUse;
}
public Character getOperative() {
return this.operative;
}
public void setOperative(Character operative) {
this.operative = operative;
}
public List<AffiliationPlan> getUserPlans() {
return this.userPlans;
}
public void setUserPlans(List<AffiliationPlan> userPlans) {
this.userPlans = userPlans;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public Long getDaysFree() {
return daysFree;
}
public void setDaysFree(Long daysFree) {
this.daysFree = daysFree;
}
}
Agora não sei mais o que pode ser, não achei nem no google algo conclusivo…
- Retire a anotação @Factory da classe PlanAction
@Name("planAction")
@Scope(ScopeType.EVENT)
public class PlanAction {
public List<Plan> factorySlctAvailablePlans() {
return planService.findAvailables();
}
- Altere o nome do método para ficar no padrão Javabean (getFactorySlctAvailablePlans)
public List<Plan> getFactorySlctAvailablePlans() {
return planService.findAvailables();
}
E depois tente rodar.
[quote=rimolive]1. Retire a anotação @Factory da classe PlanAction
@Name("planAction")
@Scope(ScopeType.EVENT)
public class PlanAction {
public List<Plan> factorySlctAvailablePlans() {
return planService.findAvailables();
}
- Altere o nome do método para ficar no padrão Javabean (getFactorySlctAvailablePlans)
public List<Plan> getFactorySlctAvailablePlans() {
return planService.findAvailables();
}
E depois tente rodar.[/quote]
Mesmo erro! Nota que não estou usando EJBs. Na verdade da um erro de NullPointerException usando dessa forma:
java.lang.NullPointerException
at org.jboss.seam.persistence.HibernatePersistenceProvider.getSession(HibernatePersistenceProvider.java:369)
at org.jboss.seam.persistence.HibernatePersistenceProvider.getId(HibernatePersistenceProvider.java:177)
at org.jboss.seam.framework.EntityIdentifier.<init>(EntityIdentifier.java:13)
at org.jboss.seam.ui.JpaEntityLoader.createIdentifier(JpaEntityLoader.java:29)
at org.jboss.seam.ui.AbstractEntityLoader.put(AbstractEntityLoader.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:32)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
at org.jboss.seam.transaction.TransactionInterceptor$1.work(TransactionInterceptor.java:97)
at org.jboss.seam.util.Work.workInTransaction(Work.java:47)
at org.jboss.seam.transaction.TransactionInterceptor.aroundInvoke(TransactionInterceptor.java:91)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:185)
at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:103)
at org.jboss.seam.ui.JpaEntityLoader_$$_javassist_seam_12.put(JpaEntityLoader_$$_javassist_seam_12.java)
at org.jboss.seam.ui.EntityConverter.getAsString(EntityConverter.java:65)
at org.jboss.seam.ui.converter.PrioritizableConverter.getAsString(PrioritizableConverter.java:67)
at org.jboss.seam.ui.converter.ConverterChain.getAsString(ConverterChain.java:126)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:448)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:480)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:772)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:832)
at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:280)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
at org.jboss.seam.ui.util.cdk.RendererBase.renderChild(RendererBase.java:190)
at org.jboss.seam.ui.util.cdk.RendererBase.renderChildren(RendererBase.java:166)
at org.jboss.seam.ui.renderkit.ValidateAllRendererBase.doEncodeChildren(ValidateAllRendererBase.java:33)
at org.jboss.seam.ui.util.cdk.RendererBase.encodeChildren(RendererBase.java:92)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:277)
at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)
at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:279)
at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)
at org.ajax4jsf.renderkit.html.AjaxOutputPanelRenderer.encodeChildren(AjaxOutputPanelRenderer.java:78)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
at org.jboss.seam.web.RewriteFilter.doFilter(RewriteFilter.java:63)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:42)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
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:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Conforme diz aqui [http://docs.jboss.org/seam/latest/reference/en-US/html/controls.html#d0e28276], acrescentei essa linha no meu components.xml:
<ui:jpa-entity-loader entity-manager="#{em}"/>
Dai muda o erro para aquele “# org.jboss.seam.Entity$NotEntityException: Not an entity class: java.lang.Long”.
Já não sei mais nada… Imagino que seja por algum problema de transação já que estou usando:
<persistence:entity-manager-factory
name="facJpa"
persistence-unit-name="facJpa"/>
<persistence:managed-persistence-context
name="em"
auto-create="true"
entity-manager-factory="#{facJpa}"/>
<transaction:entity-transaction entity-manager="#{em}"/>
Cara…
você já deve ter resolvido este problema, mas em todo caso, nunca use rendered diretamente no componente.
Acredito que dê problema na montagem da árvore de componentes.
Tente colocar um h:panelGroup ou um s:fragment em volta do componente, e use o rendered nele.
Abraço