相关疑难解决方法(0)

JSF请求作用域bean继续在每个请求上重新创建新的有状态会话bean吗?

我正在使用JSF,PrimeFaces,Glassfish和Netbeans构建我的第一个Java EE应用程序.因为我是新手,所以我可能会接近核心问题.

核心问题:我想安全地维护用户的信息.关于是否应该在JSF会话bean或有状态会话EJB中维护它似乎存在矛盾的想法.我正在尝试使用有状态会话EJB,因为它更安全.

问题是我的应用程序似乎正在创建该bean的多个实例,当我希望它创建一个并重新使用它时.如果我刷新页面它运行@PostConstruct@PostActivate3次,他们都用不同的实例.然后,当我重新部署应用程序时,它们都会被破坏.

我误解了它应该如何工作或错误配置了什么?

我将尝试显示一个修剪过的代码示例:

basic.xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:c="http://java.sun.com/jsp/jstl/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        Hello from Facelets
        <c:if test="#{loginController.authenticated}">
            Authenticated
        </c:if>
        <c:if test="#{loginController.authenticated}">
            Authenticated
        </c:if>
        <c:if test="#{loginController.authenticated}">
            Authenticated
        </c:if>
    </h:body>
</html>
Run Code Online (Sandbox Code Playgroud)

LoginController:

@Named(value = "loginController")
@RequestScoped
public class LoginController implements Serializable {

    @EJB
    private UserBeanLocal userBean;

    public boolean isAuthenticated() {
        return userBean.isAuthenticated();
    }

}
Run Code Online (Sandbox Code Playgroud)

UserBean(不包括UserBeanLocal界面)

@Stateful
public …
Run Code Online (Sandbox Code Playgroud)

java-ee ejb-3.0 jsf-2

32
推荐指数
1
解决办法
1万
查看次数

JSF服务层

我不确定我在JSF中使用MVC环境的方法是否是最好的方法.由于我想要充分利用JSF,我想知道我的服务层(或模型,用MVC术语说)应该如何"设计".

我知道视图 - 控制器比率应该是1比1(排除例外情况).现在我应该以什么方式设计我的服务层?我应该使用一项大型服务(不这么认为)吗?如果没有,根据我应该分割我的服务?

注意,我的服务将从Beans(控制器以MVC术语)调用,服务本身将在必要时使用JPA调用DAO.

提前致谢

java model-view-controller jsf service-layer

20
推荐指数
1
解决办法
1万
查看次数

JSF托管bean EJB注入

我在企业应用程序模块中有一个EJB(PersonManager),它注入另一个EJB(Person):

@Stateful
public class PersonManager implements PersonManagerLocal {
    @EJB
    private PersonLocal person;

    @Override
    public void setPersonName(String name) {
        person.setName(name);
    }

    @Override
    public String getPersonName() {
        return person.getName();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在JSF Web应用程序中使用PersonManager EJB.我在faces-config.xml中定义它:

<managed-bean>
    <managed-bean-name>personManager</managed-bean-name>
    <managed-bean-class>ejb.PersonManager</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Run Code Online (Sandbox Code Playgroud)

问题是,不会发生PersonLocal EJB的注入.person属性始终为NULL.我错了什么?

但是如果我在这样的JSF托管bean中注入PersonManager:

@ManagedBean
@RequestScoped
public class Index {
    @EJB
    private PersonManagerLocal personManager;
    ....
Run Code Online (Sandbox Code Playgroud)

有用.我需要第一个场景,请帮助我:-D

jsf ejb managed-bean

18
推荐指数
1
解决办法
3万
查看次数

过滤器不初始化EntityManager

我试图在View模式中使用Open Session,但是每当我试图捕捉到EntityManagerManagedBeanentityManager到来时NULL我就是这样做的:

package filters;

// imports..    


public class JPAFilter implements Filter {

    private EntityManagerFactory factory;

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        EntityManager entityManager = this.factory.createEntityManager();
        request.setAttribute("entityManager", entityManager);
        entityManager.getTransaction().begin();

        chain.doFilter(request, response);

        try {
            entityManager.getTransaction().commit();
        } catch (Exception e) {
            entityManager.getTransaction().rollback();
            throw new ServletException(e);
        } finally {
            entityManager.close();
        }
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.factory = Persistence.createEntityManagerFactory("copadomundo");

    }

    @Override
    public void destroy() { …
Run Code Online (Sandbox Code Playgroud)

jpa java-ee jsf-2 jpa-2.0 servlet-filters

3
推荐指数
1
解决办法
4119
查看次数