如果符合某些条件,我正在使用ViewHandler阻止任何访问页面上的所有输入元素。
这适用于“主要”xhtml文件中的输入元素,但复合组件中的输入元素未被阻止。我认为这与JSF仅在我的ViewHandler完成它的工作后嵌入这些组件这一事实有关。
有没有人知道如何禁用复合中的元素?
答案 0 :(得分:4)
ViewHandler
是错误的工具。它旨在创建,构建和恢复视图,并生成用于JSF表单和链接的URL。它并不打算在视图中操作组件。
对于您的特定功能要求,SystemEventListener
PostAddToViewEvent
可能是最佳选择。我刚做了一个快速测试,它也适用于复合材料的输入。
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>
的{{1}}内注册如下:
faces-config.xml