标签: managed-bean

刷新JSF 2.0中的托管会话bean

在我将一些数据提交到数据库之后,我希望我的会话bean自动刷新自己以反映最近提交的数据.在JSF 2.0中使用托管会话bean时,如何实现这一目标?

目前,我必须重新启动Web服务器才能清除会话并重新加载.

jsf javabeans session-bean managed-bean

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

如果我编写@managed bean 注释并在faces-config.xml 中定义相同的bean 是否会有两个实例

在我的应用程序中,我们在某些地方使用 @ManagedBean 注释对 Person bean 和我们在 faces-confing.xml 中定义的同一个 Person bean 同时使用,如下所示。

@ManagedBean("name=person")
 @SessionScoped
 Public class Person{


}
Run Code Online (Sandbox Code Playgroud)

人脸配置文件

<managed-bean>
     <managed-bean-name>person</managed-bean-name>
     <managed-bean-class>com.test.sample.Person</managed-bean-class>
     <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Run Code Online (Sandbox Code Playgroud)

我的问题是这种方法是否为 Person bean 创建了两个实例,或者如果我这样做很重要?如果我对应用程序中的每个 Bean 都这样做,这对我的应用程序的性能有什么影响吗?

faces-config jsf-2 managed-bean

2
推荐指数
1
解决办法
839
查看次数

CDI 不适用于隐式 @Dependent 作用域,不满意注入点编译时错误

容器是 Glassfish 4.1

我现在对 CDI 有一个非常奇怪的问题。如果我不注释我的NumberGenerator服务@Dependent,那么当我运行应用程序时,我会不断收到不满意的注入点错误。但是如果我明确地注释我的NumberGenerator实现,那么一切都会起作用。一句话,如果我想使用@Dependent默认作用域进行依赖注入,我必须明确指定它。

 public interface NumberGenerator {
    String generateNumber();  
 }
Run Code Online (Sandbox Code Playgroud)

第一次实施 NumberGenerator

import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;

@ThirteenDigits
@Dependent
public class IsbnGenerator implements NumberGenerator {

    @Inject
    private Logger logger;

    @Override
    public String generateNumber() {
        String isbn = "13-84356-" + Math.abs(new Random().nextInt());
        logger.log(Level.INFO, "Generated ISBN : {0}", isbn);
        return isbn;
    }

}
Run Code Online (Sandbox Code Playgroud)

第二次实施 NumberGenerator

import java.util.Random;
import java.util.logging.Logger;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;

@EightDigits
@Dependent
public …
Run Code Online (Sandbox Code Playgroud)

dependency-injection glassfish cdi managed-bean glassfish-4.1

2
推荐指数
1
解决办法
1316
查看次数

托管Bean的托管Bean类java.time.ZonedDateTime并未声明公共的无参数构造器。

为了获得当前日期,我在faces-config.xml下面声明了一个托管bean 。

<managed-bean>
    <managed-bean-name>currentDate</managed-bean-name>
    <managed-bean-class>java.time.ZonedDateTime</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
Run Code Online (Sandbox Code Playgroud)

之前,我一直在使用org.joda.time.DateTime并且工作正常。可以像下面这样在EL中访问此bean。

<h:outputText value="#{currentDate}" converter="#{converter}"/>
Run Code Online (Sandbox Code Playgroud)

但是,这导致引发以下异常。

16:15:29,984 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (default task-16) Error Rendering View[/admin_side/Home.xhtml]: com.sun.faces.mgbean.ManagedBeanCreationException: Unable to create managed bean currentDate.  The following problems were found:
     - Managed bean class java.time.ZonedDateTime for managed bean currentDate doesnt declare a public no-argument constructor.
    at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:265)
    at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:257)
    at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:117)
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
    at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:116)
    at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226)
    at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
    at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
    at javax.faces.component.UIOutput.getValue(UIOutput.java:174)
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
    at …
Run Code Online (Sandbox Code Playgroud)

jsf faces-config managed-bean java-time

2
推荐指数
1
解决办法
395
查看次数

在使用另一个ManagedBean之前实例化ManagedBean(声明为@ManagedProperty)

我使用@ManagedBean(请求作用域)作为@ManagedProperty另一个内部@ManagedBean.但是,在使用时bean(一个用作a @ManagedProperty)是未实例化的,因此导致NullPointerException.

我该如何解决这个问题?

jsf managed-bean

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

<h:commandButton>不调用方法

我有一个 <h:commandButton>

   <f:metadata>
        <f:viewParam name="uri" value="#{pesquisaBean.selectedUri}" />
        <f:event listener="#{pesquisaBean.searchElement()}" type="preRenderView"></f:event>
    </f:metadata>
    <h:head>
        <title>Detalhes do Documento</title>
    </h:head>

       <h:body>
       <br />
       Detalhes do Documento

       <br />
       <br />
       <rich:dataTable value="#{pesquisaBean.documentDetailsByTitle}" var="result">

                <c:forEach items="#{pesquisaBean.variableNamesDetails}" var="vname">
                     <rich:column>
                         <f:facet name="header">#{vname}</f:facet>
                          #{result[vname]}
                     </rich:column> 

                </c:forEach> 
       </rich:dataTable>
       <br />
       <h:commandButton value="Excluir" action="#{pesquisaBean.delete()}" />
       <br />
       <br />
Run Code Online (Sandbox Code Playgroud)

和这个行动方法

  public void delete() {
    System.out.println("Hello");
    this.removeDocument(databaseModel, this.selectedDocument);

    System.out.println("");
    System.out.println("After deleting!!!!!!!!!!!!");
    StmtIterator result = databaseModel.listStatements();
    while( result.hasNext() ) {
        Statement stmt = result.next();
        System.out.println(stmt);
    }
Run Code Online (Sandbox Code Playgroud)

但是,命令按钮不会调用操作方法.我正在尝试Hello在方法的第一行打印,但它没有打印.

这是怎么造成的,我该如何解决?

jsf action managed-bean commandbutton

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

CDI豆注射

这是@ApplicationScoped@SessionScopedbean中注入bean 的正确方法吗?这会导致我的应用程序作用域bean存储在每个用户的会话中吗?

我有一个应用程序范围的bean,它包含我们在所有系统用户之间共享的一些值,现在我需要在会话bean的方法中获取这些值.

jsf cdi managed-bean jsf-2.2

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

XPages:从managedBean读取私有属性失败

在Xpage中,我需要计算多个checkBox控件的禁用属性.所以我为此构建了一个javaBean并将其注册为managedBean.原则上它就像一个魅力:一个computedField控件的value属性使用EL绑定到bean的一个私有变量:

value="#{myBean.myTestValue}"
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,它显示了正确的内容.

接下来,我将checkBox的disabled属性绑定到我的bean中计算的私有布尔变量,再次使用EL:

disabled="#{myBean.isCheckBoxDisabled}"
Run Code Online (Sandbox Code Playgroud)

不幸的是,这次javax.faces.el.PropertyNotFoundException抛出了.

作为一种解决方法,我创建了一个getter方法,然后我从checkBox的disabled属性调用,这次作为JS代码:

disabled="#{javascript:myBean.isCheckBoxDisabled()}
Run Code Online (Sandbox Code Playgroud)

这是按预期工作,已设置disabled属性.这对我来说基本没问题虽然我本来喜欢用EL做这件事,因为这似乎是最佳实践.

问题是:为什么控件的value属性可以使用bean的私有变量而disabled属性不能?

java managed-bean xpages xpages-ssjs

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

将JSF托管bean注释与Spring Boot集成

我在JSF 2.2中使用Spring启动.我的问题是我可以创建@ManagedBean,javax.annotation.ManagedBean当我运行应用程序时它在我的index.xhtml中工作,但是当我想使用时javax.faces.bean.ManagedBean不显示值.这两者有什么区别?为什么我不能用 javax.faces.bean.ManagedBean?(我没有web.xml文件,所有都在类中配置)

jsf spring managed-bean spring-boot

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

@ApplicationScoped Bean被构造多次

我有两个托管Java Bean:

import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

import javax.ws.rs.Path;

@Path("/sync")
@ManagedBean(name="syncService", eager=true)
@ApplicationScoped
public class SyncService {
    @ManagedProperty(value="#{ldapDirectoryAccess}")
    private DirectoryAccess directoryAccess;

    public void setDirectoryAccess(DirectoryAccess directoryAccess) {
        System.out.println("SyncService.setDirectoryAccess()");
        this.directoryAccess = directoryAccess;
    }

    public SyncService() {
        System.out.println("SyncService() - constructed: " + this);
    }

    @PostConstruct
    public void init() {
        System.out.println("DirectoryAccess injected: " + directoryAccess + " in: " + this);
    }
    ...
}

@ManagedBean(name="ldapDirectoryAccess", eager=true)
@ApplicationScoped
public class LdapDirectoryAccess implements DirectoryAccess {
    public LdapDirectoryAccess() {
        System.out.println("LdapDirectoryAccess constructed: " + this); …
Run Code Online (Sandbox Code Playgroud)

jsf dependency-injection managed-bean

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