【问题标题】:Enable\Disable commandbutton depending on URL parameter根据 URL 参数启用\禁用命令按钮
【发布时间】:2015-02-10 12:29:18
【问题描述】:

JSF 2 允许使用<f:viewParam> 标签初始化 URL 参数。

例如:

<f:viewParam id="name" name="name"
            value="#{applicationBean.name}" required="true" />

然后在backing bean中使用这个参数来加载一些使用&lt;f:event&gt;的对象。

例如:

<f:event type="preRenderView"
            listener="#{applicationBean.preRenderView}" />

applicationBean 中的 preRenderView() 方法将一些布尔变量 buttonEnabled 设置为 true\false

当在主页中使用此变量来启用\禁用按钮时,它不起作用(例如,它总是评估为假):

<h:commandButton disabled="#{!applicationBean.buttonEnabled}">

有什么建议吗?

【问题讨论】:

  • 鉴于您正在调用 bean 方法,变量不是也在 bean 中吗? #{applicationBean.buttonEnabled}
  • 我已经在使用 bean 变量了。我编辑了帖子。

标签: jsf disabled-control viewparams


【解决方案1】:

存在时间问题。操作事件在应用请求值阶段排队。作为防止被篡改请求的一部分,它还会在此时评估disabled(和rendered)属性。然而,由于它实际上只是在渲染响应阶段之前设置,所以它确实总是会评估为其默认值,显然是false

您需要在@PostConstruct 中执行基于请求参数的初始化作业(&lt;f:viewParam&gt; 确实不合适),或者让disabled 属性检查请求参数本身而不是bean 属性(那么bean属性确实不合适)。

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 2011-02-01
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    相关资源
    最近更新 更多