标签: managed-bean

单元测试jsf 2.0 Managed Bean的最佳方法

什么是单元测试JSF 2.0托管bean的最有效方法.我见过JBoss的JSFUnit,但看起来它是用于测试facelets页面中的组件而不是托管bean本身.

我想找到一种方法来有效地单独测试托管bean.

有任何想法吗?

java jsf-2 managed-bean

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

如何使用JDBCRealm获取登录用户的用户名?

我正在运行Glassfish 3.0,我正在实现JDBCRealm用于登录身份验证.用户名和角色保存在名为usertable的表中.身份验证按预期工作.

但问题是,当用户登录时,如何在应用程序中检索登录用户的用户名?

PS:我正在实现JSF页面和Managed Bean

java jsf login j-security-check managed-bean

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

JSF 2 - @ViewScoped bean在请求之间存在于何处?

我试图更好地理解@ViewScopedJSF 2中bean 的低级工作原理.服务器在请求之间保持视图范围的bean在哪里?我注意到我的视图范围的bean需要实现Serializable,所以它们必须被序列化到某个位置.

任何人都可以解释这个或提供解释它的文档的链接?

我问这个问题是因为我可能在我的webapp中引入了与范围相关的缺陷.了解@ViewScoped工作原理将有助于我排除一些潜在的原因.

java serialization scope jsf-2 managed-bean

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

JSF不会使用提交的输入值填充@Named @RequestScoped bean

这是我在这个美丽网站的第一个问题.我google了很多,但我没有找到任何解决方案.

我是JSF的新手,我正在通过Kent Ka lok Tong的"JSF 2 API和JBoss Seam"学习它.

现在我有一个简单的登录实现的问题.我有一个登录页面:

<?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">
    <h:head>
        <title>Login</title>
    </h:head>
    <h:body>
        <h1>Login</h1>
        <h:messages for="loginForm" />
        <h:form id="loginForm">
            <h:inputText id="username" value="#{loginRequest.username}" required="true" />
            <h:inputSecret id="password" value="#{loginRequest.password}" required="true" />
            <h:commandButton value="Login" action="#{loginRequest.doLogin}"></h:commandButton>
        </h:form>

    </h:body>
</html>
Run Code Online (Sandbox Code Playgroud)

和一个支持bean:

package app.controller;

import app.model.beans.User;
import javax.faces.bean.RequestScoped;
import javax.inject.Named;


@Named("loginRequest")
@RequestScoped
public class LoginRequest {

    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void …
Run Code Online (Sandbox Code Playgroud)

jsf cdi jsf-2 managed-bean

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

ejbFacade为空

我从jsf页面调用managedBean OverzichtAlle.java overzichtAlleGroepen.xhtml

但是当我进入这个页面时,由于Nullpointerexception,我得到的错误消息无法实例化managedBeans.OverzichtAlle ...

当我调试时,我看到我的ejbFacade为空...

这是EJB

@EJB private ProjecttypeEFacade ejbFacade;
Run Code Online (Sandbox Code Playgroud)

这是我的构造函数:

public OverzichtAlle() 
{
    projE = ejbFacade.findAll();
    omvormenProjectTypes();
}
Run Code Online (Sandbox Code Playgroud)

projE是一个List(实体列表)

我究竟做错了什么?

jsf ejb managed-bean

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

从操作方法结果调用页面时不调用JSF 2 Prerenderview侦听器

我在f:metadata元素中使用prerender视图事件调用另一个页面.

如果我使用<h:link>它导航到页面工作并调用侦听器方法.

但是,如果我使用属于调用页面的托管bean的操作方法的结果导航到页面,则不会调用prerenderview中指定的侦听器(如果通过链接调用它).它会导航到第二页,只是没有监听器调用.

我真的更喜欢从action方法调用,因为我使用它来做一些工作并在会话映射中放置一个变量来使用.我不确定如何使用链接实现相同的功能.对象可能相当大...... kb不是Mb,但仍然不是我想要放在请求中的东西.

我已经尝试使调用页面请求的托管bean作用域并查看作用域.

如果从托管bean结果调用它,是不是可以获取prerenderview?正如我所说,我从一个链接开始工作.

<body>
    <ui:define name="metadata">
        <f:view>
            <f:metadata>
                <f:event type="preRenderView" listener="#{businessBean.init}" />
            </f:metadata>
        </f:view>
    </ui:define>
    <ui:composition template="#{navigationprops.soulard_2col_uprefs_template}">
Run Code Online (Sandbox Code Playgroud)

facelets jsf-2 managed-bean

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

每个请求都会重新创建复合组件中的支持bean

我有两个变量"userId"和"name".当我点击例如"SHOW USERID"按钮时它工作正常并设置"renderUserId = true"并用"render"显示它,但是如果我点击另一个"SHOW"按钮,那么Bean重建并且我松了"renderUserId = true",它变为"false"和"renderName = true",因此它显示正常,但USERID被隐藏.

我的问题是,当我渲染xhtml时,如何避免丢失bean值?

这是我的代码的简单模拟.

注意:如果我在"h:commandButton"中使用"actionListener"而不是"f:setPropertyActionListener"我有相同的结果,那么bean就是重构

example.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:cc="http://java.sun.com/jsf/composite">

    <cc:interface componentType="com.bean.ExampleBean">
        <cc:attribute name="userId" type="java.lang.Integer"/>
        <cc:attribute name="name" type="java.lang.String"/>
    </cc:interface>

    <cc:implementation>

        <h:panelGrid id="example_panel" columns="1" width="100%">

            <h:outputText value="USERID: #{cc.attrs.userId}" rendered="#{!cc.attrs.renderUserId}"/>

            <a4j:commandButton value="SHOW USERID" render="example_panel"
                rendered="#{!cc.attrs.renderUserId}">
                <f:setPropertyActionListener value="#{true}"
                    target="#{cc.attrs.renderUserId}"/>
            </a4j:commandButton>                
            <a4j:commandButton value="HIDE USERID" render="example_panel"
                rendered="#{cc.attrs.renderUserId}">
                <f:setPropertyActionListener value="#{false}"
                    target="#{cc.attrs.renderUserId}"/>
            </a4j:commandButton>                


            <h:outputText value="NAME: #{cc.attrs.name}" rendered="#{!cc.attrs.renderName}"/>

            <a4j:commandButton value="SHOW NAME" render="example_panel"
                rendered="#{!cc.attrs.renderName}">
                <f:setPropertyActionListener value="#{false}"
                    target="#{cc.attrs.renderName}"/>
            </a4j:commandButton>                
            <a4j:commandButton value="HIDE NAME" render="example_panel"
                rendered="#{cc.attrs.renderName}">
                <f:setPropertyActionListener value="#{false}"
                    target="#{cc.attrs.renderName}"/>
            </a4j:commandButton>                


        </h:panelGrid>

    </cc:implementation>

</ui:composition> …
Run Code Online (Sandbox Code Playgroud)

java composite-component jsf-2 managed-bean

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

无法使用CDI注入log4j - WELD-001408:对于具有限定符@Default的Logger类型的不满意依赖性

我确实遇到了与此处所述相同的问题:JBoss7.1.3:@EJB在@Inject失败的情况下工作 可能是相同的设置(Wildfly 8.0).

尽管有一个带有生产者的Resource类,但我无法注入一个Logger实例.在Controller中Neiter,也不在EJB中.[问题1]如果我错了,请纠正我,我应该能够将它们注入@Model bean以及使用@Stateless(EJB)注释的bean,不应该吗?

package com.doe.webapp.service.auxilliary.cdiproducer;

import javax.enterprise.context.Dependent;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.faces.context.FacesContext;
import org.apache.log4j.Logger;

    @Dependent
    public class Resources {

        @Produces
        public Logger produceLog(InjectionPoint injectionPoint) {
            return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
        }

        @Produces
        @RequestScoped
        public FacesContext produceFacesContext() {
            return FacesContext.getCurrentInstance();
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是我的控制器的开始:

package com.doe.webapp.controller.security;

import java.io.IOException;
import java.util.Map;    
import javax.annotation.PostConstruct;
import javax.enterprise.inject.Model;
import javax.enterprise.inject.Produces;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedProperty;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.Pattern;    
import org.slf4j.Logger;

import …
Run Code Online (Sandbox Code Playgroud)

logging cdi jsf-2 managed-bean

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

Xpages:managedBean不断"丢失"全局Domino Session对象

我正在为Xpages应用程序构建managedBean.目前,bean在视图范围的faces-config中注册,因为我需要它在每个页面加载时重新初始化(见下文).bean的构造函数初始化了几个类变量,这些变量的值在整个类的代码中被引用.其中一个变量是Domino session对象,另一个例子是当前的document datasource:

private Session session;
private DominoDocument ds;
Run Code Online (Sandbox Code Playgroud)

两者都在构造函数中初始化为

session=DominoUtils.getCurrentSession();
ds=(DominoDocument) resolveVariable(dsName);
Run Code Online (Sandbox Code Playgroud)

(resolveVariable是一个内部帮助方法;不要认为我需要在这里解释一下)

除了构造函数和各种帮助器方法之外,在同一个类中还有一些其他公共方法在按钮单击时调用.大多数这些附加方法都使用相同的文档数据源以及当前的会话对象.

发生的事情是我的其他方法可以访问和使用全局数据源对象(ds)但是如果它们试图访问全局会话对象则会引发错误; 进一步向下堆栈跟踪我发现似乎导致错误:

NotesException: Object has been removed or recycled
Run Code Online (Sandbox Code Playgroud)

我的代码现在根本没有回收,会话对象必须在途中丢失.

作为一种解决方法,我开始将会话对象从SSJS传递到每个方法中

public void testMethod(Session s){System.out.println("my name is"+ s.getEffectiveUserName()); }

哪个工作正常.但是为什么bean对象会记住所有其他对象和变量而忘记全局会话?

BTW:我试图将我的managedBean绑定到会话范围,但这根本没有帮助.是的,我甚至在做出改变之后重启了整个服务器......

java session managed-bean xpages xpages-ssjs

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

从JSF托管bean生成CSS

我有这个CSS代码:

td[data-date='2016-03-08']{
  background-color: #F7F7F7;
}
Run Code Online (Sandbox Code Playgroud)

我想将其应用于要从数据库加载的多个日期。所有这一切都可能在我生成CSS代码的JSF托管bean中发生。

所以我的问题是,如何应用将从JSF托管bean中获得的CSS?

css jsf dynamically-generated managed-bean

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