Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JSF2.0 Flash范围问题_Java_Jsf 2 - Fatal编程技术网

Java 使用JSF2.0 Flash范围问题

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-

我在使用基本的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-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;