Java 使用JSF2.0 Flash范围问题
我在使用基本的JSF2.0程序时遇到了问题!我正在尝试实现Flash scope,我已经将信息转到第二页,但是现在在引用Flash变量时遇到了问题 这是我的第一个带有bean的页面,它运行良好:Java 使用JSF2.0 Flash范围问题,java,jsf-2,Java,Jsf 2,我在使用基本的JSF2.0程序时遇到了问题!我正在尝试实现Flash scope,我已经将信息转到第二页,但是现在在引用Flash变量时遇到了问题 这是我的第一个带有bean的页面,它运行良好: <?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-
<?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>Welcome to the JSF PoCs project</title>
</h:head>
<h:body>
<h:form>
<h1>Welcome to the JSF PoCs project</h1>
<h:outputText value="Name: "/>
<h:inputText id="txtName" value="#{registerBean.name}"/>
<h:outputText value="EMail: "/>
<h:inputText id="txtEMail" value="#{registerBean.email}"/>
<h:commandButton value="register" action="#{registerBean.register}"/>
<h:outputText></h:outputText>
</h:form>
</h:body>
</html>
import javax.faces.bean.ManagedBean;
@ManagedBean(name="registerBean")
public class RegisterBean {
private String name;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String register() {
JSFUtils.flashScope().put("registerBean", this);
return "next";
}
}
欢迎来到JSF PoCs项目
欢迎来到JSF PoCs项目
导入javax.faces.bean.ManagedBean;
@ManagedBean(name=“registerBean”)
公共类注册bean{
私有字符串名称;
私人字符串电子邮件;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getEmail(){
回复邮件;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
公共字符串寄存器(){
JSFUtils.flashScope().put(“registerBean”,this);
返回“下一步”;
}
}
这就是问题所在!它在heading1标记中显示正确的数据,但不使用相同的数据设置下一个bean变量
现在我的问题是,为什么它适用于标题标记,而不设置另一个bean变量
<?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"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:f="http://java.sun.com/jsp/jstl/functions">
<h:head>
<title>Welcome to the JSF PoCs project</title>
</h:head>
<h:body>
<h:form>
<c:set target="${confirmBean}" property="name" value="# {flash.registerBean.name}"/>
<c:set target="${confirmBean}" property="email" value="${flash.registerBean.email}"/>
<h1>Your User Name will be #{flash.registerBean.name} and email will be # {flash.registerBean.email}</h1>
<h:commandButton value="confirm" action="#{confirmBean.confirm}"/>
</h:form>
</h:body>
</html>
import javax.faces.bean.ManagedBean;
@ManagedBean(name="confirmBean")
public class ConfirmBean {
private String name;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String confirm() {
JSFUtils.flashScope().put("confirmBean", this);
return "confirmPage";
}
欢迎来到JSF PoCs项目
您的用户名将为#{flash.registerBean.Name},电子邮件将为#{flash.registerBean.email}
导入javax.faces.bean.ManagedBean;
@ManagedBean(name=“confirBean”)
公共类确认{
私有字符串名称;
私人字符串电子邮件;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getEmail(){
回复邮件;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
公共字符串确认(){
JSFUtils.flashScope().put(“confirbean”,this);
返回“确认页面”;
}
}
按下confirm.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://java.sun.com/jsf/html">
<h:head>
<title>Welcome to the JSF PoCs project</title>
</h:head>
<h:body>
You have now registered with: #{flash.confirmBean.name} and # {flash.confirmBean.email}<br/>
</h:body>
</html>
欢迎来到JSF PoCs项目
您现在已注册:#{flash.confirbean.name}和#{flash.confirbean.email}
感谢您提前提供的任何帮助 JSTL
标记在构建视图时运行,而不是在呈现或恢复视图时运行。因此,它们仅在显示表单的请求中,而不是在提交表单的请求中,在confirbean
中设置。由于confirbean
是请求范围,因此所有设置值都将丢失
我建议通过传递参数来替换整个Flash示波器
<h:commandButton value="confirm" action="#{confirmBean.confirm}">
<f:param name="name" value="#{registerBean.name}" />
<f:param name="email" value="#{registerBean.email}" />
</h:commandButton>
这仍然不起作用,下一页应该有value=“#{flash.registerBean.name}和value=“#{flash.registerBean.email}”中的信息,但它是空白的。如果我输入类似value=“Michael”的内容,我会工作“但现在不是这样吗?嗯,我明白了。我更新了答案以采用另一种方法。我仍然不工作…但不要担心,我将使用viewscope,谢谢您的帮助!!:)嘿,
@ViewScope
有什么解决方案吗??
@ManagedProperty(value="#{param.name}")
private String name;
@ManagedProperty(value="#{param.email}")
private String email;