当前位置: 首页 > 知识库问答 >
问题:

@viewscoped的@PostConstruct在每个请求上调用[重复]

葛霄
2023-03-14

我的观点是:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:c="http://java.sun.com/jstl/core"
    xmlns:p="http://primefaces.org/ui">

<h:head>

</h:head>
<h:body>
    <h:form id="f1">
        <p:dialog widgetVar="trainingDialog2" id="d1">
            <h:outputText value="#{userViewBean.errorMessage}" />
        </p:dialog>
        <br />

        <p:dataTable id="dt1" value="#{userViewBean.infoList}" var="item">
            <p:column>
                <p:commandButton id="btn" update=":f1:d1"
                    oncomplete="PF('trainingDialog2').show()"
                    styleClass="ui-icon ui-icon-calendar">
                    <f:setPropertyActionListener value="#{item.id}"
                        target="#{userViewBean.errorMessage}" />
                </p:commandButton>
            </p:column>
        </p:dataTable>
    </h:form>
</h:body>
</html>

是我的豆子:

package pl.jrola.java.www.vigym.viewcontroller.beans.userview;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.view.ViewScoped;

@ManagedBean(name = "userViewBean")
@ViewScoped
public class UserViewBean implements Serializable {

    private static final long serialVersionUID = 6994205182090669165L;

    private String errorMessage;

    private List<UserProfileInfoBean> infoList;

    public List<UserProfileInfoBean> getInfoList() {
        return infoList;
    }

    public void setInfoList(List<UserProfileInfoBean> infoList) {
        this.infoList = infoList;
    }


    public UserViewBean() {

    }

    @PostConstruct
    public void postConstruct() {
        this.infoList = new ArrayList<UserProfileInfoBean>();
        for (long i = 0; i < 3; i++) {
            this.infoList.add(new UserProfileInfoBean(i));
        }

    }


    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }


}

共有1个答案

鲁熙云
2023-03-14

您将JSF bean和CDI bean的注释混合在一起,有效地使bean成为@requestscoped,因为这是@managedbean的默认值。

如果使用JSF beans,请使用:

javax.faces.bean.ManagedBean;
javax.faces.bean.ViewScoped;

如果您想使用CDI beans,请使用:

javax.inject.Named;
javax.faces.view.ViewScoped;
 类似资料:
  • 问题内容: 再次,我看到即使没有使用绑定属性,@ PostConstruct也会每次触发。看到这个代码:- 这是JSF中最简单的bean: 您是否看到任何会导致每次触发postconstruct回调的行为?我认为JSF 2.0非常不稳定。如果每次都要触发PostConstruct @ViewScoped的作用是什么。为什么不只使用@RequestScoped?我以为我在申请中犯了一些错误。但是,当

  • 运行在Mojarra 2.1.13、PrimeFaces 3.5、JDK 1.6.x上。和Apache Tomcat 7.0.27,谢谢! 多谢了。

  • 问题内容: 无论我们是否检查会话变量,会话超时都会在每个请求上重置吗?还是我们应该使用至少一个会话变量? Ajax请求是否导致重置会话超时?像,… 谢谢 编辑1) 会导致重置会话超时吗? 问题答案: 是的,它确实。是否实际使用都没关系。 但是,如果 仅 使用ajax调用,则可能会遇到一些问题。 (虽然我还没有遇到过它自己,在这里的解释)

  • 问题内容: 我正在使用带有GlassFish 3.0的JSF 2.0。 我有以下托管豆: 从 overview.xhtml 文件中,我从OverviewController中调用不同的属性或方法。 一切正常,但问题出在日志文件上: 如您所见,init()方法在同一请求中被两次调用,无缘无故。据我所知,每个带有 PostConstruct 注释的方法都会被调用一次。我错了吗? 编辑: 页面上未使用A

  • 我目前正在维护相当大Javawebapp,我需要让它也在Weblogic服务器12.2.1.3.0上运行。该应用程序在JBoss 7、Wildfly 13和Webphere上运行正常。 我能够将应用程序部署到Weblogic,启动它(没有任何错误)并登录。应用程序为3个PAHT(“/”、“/我的应用程序”、“/我的应用程序/主页”)创建3个JSESSIONID cookie。但是,路径“/”的JS

  • 问题内容: 这是很尴尬的,因为elasticsearch的全部目的是搜索,但是我的某种方式已经失去了搜索的能力。 我的配置 要点: 我在负载均衡器下获得了2个Elasticsearch实例。 我有3个配置了副本集的MongoDB实例。 我已经安装了river(不知道它是否与它有关),这一步:https : //github.com/richardwilly98/elasticsearch-rive