PostConstruct不称为jsf

时间:2015-01-16 03:45:58

标签: jsf

我有一个只包含命令链接的jsf页面。我的支持bean有一个post构造方法。当我点击命令链接时,我的动作方法被调用,但不调用post构造方法。这是代码..

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://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">

    <h:body>
        <ui:composition template="CommonLayout.xhtml" >
            <ui:define name="title">
                Final Page
            </ui:define>
            <ui:define name="content">

                <h:graphicImage value="resources\images\arigatougozaimashita.gif" />

                <h2 style="text-align: center; padding-bottom: 25px; padding-top: 100px">Thanks !!!</h2>

                <h:form style="text-align: center;padding-bottom: 100px; padding-top: 25px">
                    Click <h:commandLink value="here" action="#{finalPage.action}" /> to return to First Login page.
                </h:form>

            </ui:define>
        </ui:composition>
    </h:body>
</html>

支持bean:

package com.mycompany.newyearchallenge2015;

import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.view.ViewScoped;
import javax.inject.Named;

@Named(value = "finalPage")
@ViewScoped
public class FinalPage implements Serializable {

    /**
     * Constructor
     */

    @PostConstruct
    public void init(){
        System.out.println("hi");
    }

    public FinalPage() {
    }

    /**
     * @Parameters : No parameters
     * @return : String which tells what's the next page to visit
     * @Description: Called on clicking the next button.
     */
    public String action() {

        return "LoginScreen1?faces-redirect=true";

    }

}

有人知道为什么???

2 个答案:

答案 0 :(得分:1)

我猜这是因为bean是ViewScoped,并且在收到包含onClick消息的请求之前已经创建了bean。

如果它是请求作用域,我希望它的行为更像你期望的那样。

答案 1 :(得分:0)

@ViewScoped仅在重新显示相同视图时才会保留。 当您重定向到另一个视图时,@ViewScoped bean将在渲染响应阶段结束时被销毁。 我猜你只在你指定的那个视图上使用finalPage bean,在重定向到LoginScreen1视图后你使用的是不同的bean。