如果满足某些条件,我正在使用 ViewHandler 阻止任何访问页面上的所有输入元素。
这对于“主要”xhtml 文件中的输入元素非常有效,但复合组件中的输入元素不会被阻止。我认为这与 JSF 仅在我的 ViewHandler 完成它的工作后才嵌入这些组件的事实有关。
有谁知道我如何也可以禁用复合材料中的元素?
如果满足某些条件,我正在使用 ViewHandler 阻止任何访问页面上的所有输入元素。
这对于“主要”xhtml 文件中的输入元素非常有效,但复合组件中的输入元素不会被阻止。我认为这与 JSF 仅在我的 ViewHandler 完成它的工作后才嵌入这些组件的事实有关。
有谁知道我如何也可以禁用复合材料中的元素?
AViewHandler
是该工作的错误工具。它旨在创建、构建和恢复视图,并生成用于 JSF 表单和链接的 URL。它不打算在视图中操作组件。
对于您的特定功能要求,a SystemEventListener
onPostAddToViewEvent
可能是最好的选择。我刚刚做了一个快速测试,它也适用于复合材料的输入。
public class MyPostAddtoViewEventListener implements SystemEventListener {
@Override
public boolean isListenerForSource(Object source) {
return (source instanceof UIInput);
}
@Override
public void processEvent(SystemEvent event) throws AbortProcessingException {
UIInput input = (UIInput) event.getSource();
if (true) { // Do your check here.
input.getAttributes().put("disabled", true);
}
}
}
为了让它运行,在里面注册它<application>
如下faces-config.xml
:
<system-event-listener>
<system-event-listener-class>com.example.MyPostAddtoViewEventListener</system-event-listener-class>
<system-event-class>javax.faces.event.PostAddToViewEvent</system-event-class>
</system-event-listener>