【发布时间】:2013-12-07 12:37:11
【问题描述】:
我有 3 个列表框:第一个带有类型,第二个带有所选类型的子类型,第三个带有所选类型和子类型的元素。
<p:selectonelistbox id = "types" rendered = "true" valuechangelistener = "#{bean.selectType}" onchange = "submit()" />
<p:selectonelistbox id = "subtypes" rendered = "#{bean.subtypesFlag}" valuechangelistener = "#{bean.selectSubType}" onchange = "submit()" />
<p:selectonelistbox id = "elements" rendered = "#{bean.elementsFlag}" />
@viewscoped
...
private Boolean subtypesFlag = false;
private Boolean elementsFlag = false;
public void selectType(ValueChangeEvent event) {
subtypesFlag = true;
elementsFlag = false;
}
public void selectSubType(ValueChangeEvent event) {
elementsFlag = true;
}
始终显示第一个列表框,仅在选择某些类型时显示第二个列表框,仅在选择子类型时显示第三个。
当我打开视图时,只呈现类型。然后我按一些类型,子类型变得可见。接下来我按下一些子类型,元素变得可见。一切正常。
但是当我选择另一种类型时,我只想显示子类型,而不是元素列表框。我有一个问题。当我真正选择另一种类型时,我会看到所有三个列表框。当我再次按另一种类型时,我只看到类型和子类型,没有元素列表框。
这似乎是一个有趣的事实,当在 应用请求值阶段时,您的组件已将标志设置为 false 并变为 true在验证阶段(当调用值操作侦听器时)它会更改其呈现状态并在呈现响应阶段呈现。但是,当它的渲染标志在 apply request values 阶段 为 true 并在 validate 阶段 达到 false 时,它不会'看不到变化,仍然在渲染响应阶段渲染。
我可以在验证阶段以某种方式将其状态更改为 false(以编程方式可能或使其呈现的标志无效)吗?
Mojarra 2.2.4、Primefaces 4、Glassfish 4。
【问题讨论】:
标签: jsf primefaces