JBoss Seam JSF (rendered de componentes)

14 respostas
G

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.

14 Respostas

thiago.correa

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?!

G

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?

thiago.correa

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)!!!

G

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);
    }
thiago.correa

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

G

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.

thiago.correa

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!

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>
G

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>

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?

rimolive

Use a anotação @Create, pois ela executa o método ao criar o componente Seam.

G

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>

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…

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();  
     }
  1. Altere o nome do método para ficar no padrão Javabean (getFactorySlctAvailablePlans)
public List<Plan> getFactorySlctAvailablePlans() {  
         return planService.findAvailables();  
     }

E depois tente rodar.

G

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();  
     }
  1. Altere o nome do método para ficar no padrão Javabean (getFactorySlctAvailablePlans)
public List<Plan> getFactorySlctAvailablePlans() {  
         return planService.findAvailables();  
     }

E depois tente rodar.

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}"/>
carlos.scuna

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

Criado 29 de junho de 2009
Ultima resposta 17 de dez. de 2009
Respostas 14
Participantes 4