Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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
JSP/JSF在Wndow条目上初始化_Jsp_Jsf - Fatal编程技术网

JSP/JSF在Wndow条目上初始化

JSP/JSF在Wndow条目上初始化,jsp,jsf,Jsp,Jsf,我有: SP/JSF网页delegebean.jsp 关联的bean DelegateBean.java DelegateBean.java: String msg; public DelegateBean() {} clearMsg(); ... } public void clearMsg() { msg = "": } .. other methods 当页面第一次打开时,调用构造函数DelegateBean() 如果操作员按下页面上的命令按钮,刷新页面,则不会调用构造

我有: SP/JSF网页delegebean.jsp 关联的bean DelegateBean.java

DelegateBean.java:

String msg;

public DelegateBean() {}
  clearMsg();
  ...
}

public void clearMsg() {
   msg = "":
}
.. other methods
当页面第一次打开时,调用构造函数DelegateBean()

如果操作员按下页面上的命令按钮,刷新页面,则不会调用构造函数(也不应该调用)

如果操作员按下后退按钮,然后按下前进按钮,则不会调用构造函数(可能不应该调用构造函数)

问题是:如何强制clearMsg()在从“前进”按钮(另一个网页)重新输入时执行,而在从自身重新输入时不执行(按下命令按钮)

有一个好的(简单的)例子吗

谢谢,
John

faces-config.xml中bean的作用域是什么

在描述问题时,它看起来像是
会话
,因为每个会话构造的是哪个bean,而不是请求

将范围更改为
request
,您可能会表现良好

根据与@BalusC的讨论进行更新

上述
请求
范围与不从同一页面调用的要求
冲突

如果您使用的是JSF2.x,请将范围更改为
viewscope

更新#2


我认为看到您的需求,
jsf1.2
,不能改变bean的范围


最简单的方法是添加一个显式调用
clearmessage()
前进按钮的内部操作

faces-config.xml中bean的作用域是什么

在描述问题时,它看起来像是
会话
,因为每个会话构造的是哪个bean,而不是请求

将范围更改为
request
,您可能会表现良好

根据与@BalusC的讨论进行更新

上述
请求
范围与不从同一页面调用的要求
冲突

如果您使用的是JSF2.x,请将范围更改为
viewscope

更新#2


我认为看到您的需求,
jsf1.2
,不能改变bean的范围


最简单的方法是添加一个显式调用
clearmessage()
前进按钮的内部操作

看起来您的托管Bean是
@SessionScoped
,并且只有当用户第一次访问页面时才会调用构造函数

在JSF2中,这可以通过将托管Bean更改为
@ViewScoped
来实现

@ManagedBean
@ViewScoped
public class Bean {

    public Bean() {
    }

    @PostConstruct
    public void init() {
        clearMsg();
    }
}
BalusC在以下回答中对JSF托管Bean作用域给出了很好的解释:。此外,我建议您阅读答案底部的链接,以便更好地理解这些概念


在JSF1.x中,您应该将托管Bean配置为在
faces config.xml
文件中请求作用域,并在
@PostConstruct public void init
方法中调用
clearMsg
。注意,这意味着
clearMsg
方法将在涉及创建托管bean类的每个请求(甚至是ajax请求)上被调用。为了解决这个问题,您应该提供更多关于如何以及何时在JSF代码中调用这个bean的信息。默认情况下,您可以通过在会话中设置一个标志来解决此问题,并在调用
clearMsg
方法(或只需调用一次的方法)之前检查此标志

面配置

<managed-bean>
    <managed-bean-name>bean</managed-bean-name>
    <managed-bean-class>your.package.Bean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>

看起来您的托管Bean是
@SessionScoped
,只有当用户第一次访问页面时,才会调用构造函数

在JSF2中,这可以通过将托管Bean更改为
@ViewScoped
来实现

@ManagedBean
@ViewScoped
public class Bean {

    public Bean() {
    }

    @PostConstruct
    public void init() {
        clearMsg();
    }
}
BalusC在以下回答中对JSF托管Bean作用域给出了很好的解释:。此外,我建议您阅读答案底部的链接,以便更好地理解这些概念


在JSF1.x中,您应该将托管Bean配置为在
faces config.xml
文件中请求作用域,并在
@PostConstruct public void init
方法中调用
clearMsg
。注意,这意味着
clearMsg
方法将在涉及创建托管bean类的每个请求(甚至是ajax请求)上被调用。为了解决这个问题,您应该提供更多关于如何以及何时在JSF代码中调用这个bean的信息。默认情况下,您可以通过在会话中设置一个标志来解决此问题,并在调用
clearMsg
方法(或只需调用一次的方法)之前检查此标志

面配置

<managed-bean>
    <managed-bean-name>bean</managed-bean-name>
    <managed-bean-class>your.package.Bean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>

这与“如果操作员按下页面上的命令按钮,刷新页面,则不会调用(也不应该调用)构造函数”相冲突;@BalusC-yup您是正确的。将bean放在会话作用域中,并从
向前
操作显式调用构造函数,这是一个好的设计。不确定-如果DIf OP使用的是JSF2,那么您可以只使用视图范围。但是这在JSF1.x中并不存在,尽管一些JSF1.x组件库有实现同样功能的解决方案。由于开发/测试周期中的当前位置,很难更改范围。这与“如果操作员按下页面上的命令按钮,刷新页面,则不会调用(也不应该调用)构造函数”冲突;“@BalusC yup您是正确的。将bean放在会话作用域中,并从
向前
操作显式调用构造函数,这是一个好的设计。不确定-如果DIf OP使用的是JSF2,那么您可以只使用视图范围。但是这在JSF1.x中并不存在,尽管一些JSF1.x组件库有实现同样功能的解决方案。由于当前在开发/测试周期中的位置,很难更改范围。这个假设正确吗