Classe org.springframework.web.jsf.el.springbeanfaceSelResolver deve estender o tipo javax.el.elresolver

StackOverflow https://stackoverflow.com/questions/1201021

  •  05-07-2019
  •  | 
  •  

Pergunta

Estou tentando integrar o Spring em um aplicativo JSF.

Dentro faces-config.xml, Eu incluí isso:

<application>       
  <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
  <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>

Mas mostra um aviso estranho do qual não consigo me livrar de:

Class org.springframework.web.jsf.el.SpringBeanFacesELResolver must extend the type javax.el.ELResolver

Alguma ideia?

Foi útil?

Solução 6

Bem, meu problema desapareceu substituindo estas linhas por:

<!-- variable/property resolver registration -->
    <application>
        <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
        <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
    </application>

espero que ajude!

Outras dicas

De documentação da primavera, você verá isso para org.springframework.web.jsf.el.springbeanfaceSelResolver:

Delegados no WebApplicationContext de 'Business Context da primavera primeiro, depois para o resolvedor padrão da implementação subjacente do JSF

e para org.springframework.web.jsf.delegatingvariableresolver:

Primeiro delegará as pesquisas de valor para o resolvedor padrão da implementação subjacente da JSF e depois para o 'Business Context' da Spring 'WebApplicationContext

Como você pode ver, o comportamento é muito diferente. Se você não se importa com a ordem, está bem, mas se você realmente pretende usar org.springframework.web.jsf.el.springbeanfaceSelResolver, tudo o que você precisa fazer é garantir a versão do el-api.jar em seu Dependências é compatível com sua versão da primavera. Para mim, eu tenho isso (no meu maven pom):

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>3.0.5.RELEASE</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>el-api</artifactId>
    <version>6.0.32</version>
    <type>jar</type>
    <scope>provided</scope>
</dependency>

Para resolver esse tipo de problema, você deve estender o projeto javax prefix Porque Class ELResolver é um abstract class debaixo javax.el package.

Aqui está o código:

    <application>
      <javax.el-resolver>
        org.springframework.web.jsf.el.SpringBeanFacesELResolver
      </javax.el-resolver>      
    </application>

Mais informações sobre a classe ElResolver que você pode obter link.

Este é possivelmente um problema de configuração do carregador de classe. Se a classe pai do SpringBeanFaceSelResolver for de um carregador de classe diferente para o usado pelas classes JSF que fazem o bootstrapping, o cheque para ver se é uma instância do Elresolver falhará.

Problemas como esse podem acontecer se você tiver um meta-inf/faces-config.xml no caminho de classe global, mas suponho que possa haver outras causas.

Ajudaria se você postasse informações sobre o contêiner que está usando, a política de carregadores de classe para o seu aplicativo e onde você colocou bibliotecas de terceiros (como as facletes e as libras da primavera).

Configure as facetas do seu projeto. Para correr com o seu servidor local

enter image description here

Verifique os arquivos JAR que você está usando no aplicativo. Novamente os caminhos da classe definidos no aplicativo. Eu acho que é por causa dos conflitos de classe nos caminhos da classe de aplicativos.

Obrigado #saadi90, de mvnrepository.com Eu encontrei isso e resolveu o problema:

<dependency>
   <groupId>org.glassfish.web</groupId>
   <artifactId>el-impl</artifactId>
   <version>2.2</version>
</dependency>

Você precisa do el-impl dependência

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top