我有一个只包含命令链接的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";
}
}
有人知道为什么???
答案 0 :(得分:1)
我猜这是因为bean是ViewScoped,并且在收到包含onClick消息的请求之前已经创建了bean。
如果它是请求作用域,我希望它的行为更像你期望的那样。
答案 1 :(得分:0)
@ViewScoped
仅在重新显示相同视图时才会保留。
当您重定向到另一个视图时,@ViewScoped
bean将在渲染响应阶段结束时被销毁。
我猜你只在你指定的那个视图上使用finalPage
bean,在重定向到LoginScreen1
视图后你使用的是不同的bean。