Eclipse won't autocomplete bean methods in EL

2019-03-01 00:08发布

问题:

I created an application using JSF and Spring and I used the annotations @repository, @service @component and @autowired but when I am coding the Facelet file the beans cannot show up, can any one help me

faces-config.xml:

<?xml version="1.0" encoding="utf-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
              version="2.0">

    <application>
        <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
             <action-listener>org.primefaces.application.DialogActionListener</action-listener>
             <navigation-handler>org.primefaces.application.DialogNavigationHandler</navigation-handler>
            <view-handler>org.primefaces.application.DialogViewHandler</view-handler>
        </application>
</faces-config>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="

        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
        >


    <context:property-placeholder location="classpath:jdbc.properties" />
    <tx:annotation-driven transaction-manager="hibernateTransactionManager" />
    <context:component-scan base-package="com.tds.erp"/>
    <context:annotation-config/>
    <context:spring-configured/>

    <!-- Data Source Declaration -->
 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="${database.driver}" />

        <property name="url" value="${database.url}" />

        <property name="username" value="${database.user}" />

        <property name="password" value="${database.password}" />

    </bean>

    <!-- Session Factory Declaration -->
    <bean id="SessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="com.tds.erp.model" />
       <!-- <property name="packagesToScan">
            <list>
                <value>net.javabeat.spring.model</value>
            </list>
        </property>-->

        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            </props>
        </property>
    </bean>

    <!-- Enable the configuration of transactional behavior based on annotations -->
    <!--  <tx:annotation-driven transaction-manager="txManager"/>-->

    <!-- Transaction Manager is defined -->
    <bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="SessionFactory"/>
    </bean>

</beans>

the ManagedBean :

package com.tds.erp.managedController;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.tds.erp.model.Employee;
import com.tds.erp.services.IEmployeeService;


@Component
@ManagedBean
@SessionScoped
public class EmployeeMB {

    @Autowired
    private IEmployeeService EmployeService;

    private Employee employee= new Employee();
    private List<Employee> employeeList= new ArrayList<Employee>();
    private Employee selectedEmployee=new Employee();
    private boolean headerButtonsDisabled=true;

    public void setEmployeService(IEmployeeService employeService) {
        EmployeService = employeService;
    }

    public IEmployeeService getEmployeService() {
        return EmployeService;
    }

    public Employee getEmployee() {
        return employee;
    }

    public void setEmployee(Employee employee) {
        this.employee = employee;
    }

    public List<Employee> getEmployeeList() {
        return employeeList;
    }

    public void setEmployeeList(List<Employee> employeeList) {
        this.employeeList = employeeList;
    }

    public Employee getSelectedEmployee() {
        return selectedEmployee;
    }

    public void setSelectedEmployee(Employee selectedEmployee) {
        this.selectedEmployee = selectedEmployee;
    }

    public boolean isHeaderButtonsDisabled() {
        return headerButtonsDisabled;
    }

    public void setHeaderButtonsDisabled(boolean headerButtonsDisabled) {
        this.headerButtonsDisabled = headerButtonsDisabled;
    }
}

回答1:

I solve the problem, and the problem is that I imported a wrong annotation in the managed bean the wrong import:

import javax.annotation.ManagedBean;

the right import:

import javax.faces.bean.ManagedBean;

so the result :

package com.tds.erp.managedController;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.tds.erp.model.Employee;
import com.tds.erp.services.IEmployeeService;


@Component
@ManagedBean
@SessionScoped
public class EmployeeMB {



    @Autowired
    private IEmployeeService EmployeService;

    private Employee employee= new Employee();
    private List<Employee> employeeList= new ArrayList<Employee>();
    private Employee selectedEmployee=new Employee();
    private boolean headerButtonsDisabled=true;

    public void setEmployeService(IEmployeeService employeService) {
        EmployeService = employeService;
    }

    public IEmployeeService getEmployeService() {
        return EmployeService;
    }
    ...