如果满足某些条件,我正在使用 ViewHandler 阻止任何访问页面上的所有输入元素。
这对于“主要”xhtml 文件中的输入元素非常有效,但复合组件中的输入元素不会被阻止。我认为这与 JSF 仅在我的 ViewHandler 完成它的工作后才嵌入这些组件的事实有关。
有谁知道我如何也可以禁用复合材料中的元素?
如果满足某些条件,我正在使用 ViewHandler 阻止任何访问页面上的所有输入元素。
这对于“主要”xhtml 文件中的输入元素非常有效,但复合组件中的输入元素不会被阻止。我认为这与 JSF 仅在我的 ViewHandler 完成它的工作后才嵌入这些组件的事实有关。
有谁知道我如何也可以禁用复合材料中的元素?
AViewHandler是该工作的错误工具。它旨在创建、构建和恢复视图,并生成用于 JSF 表单和链接的 URL。它不打算在视图中操作组件。
对于您的特定功能要求,a SystemEventListeneronPostAddToViewEvent可能是最好的选择。我刚刚做了一个快速测试,它也适用于复合材料的输入。
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>