1

如果满足某些条件,我正在使用 ViewHandler 阻止任何访问页面上的所有输入元素。

这对于“主要”xhtml 文件中的输入元素非常有效,但复合组件中的输入元素不会被阻止。我认为这与 JSF 仅在我的 ViewHandler 完成它的工作后才嵌入这些组件的事实有关。

有谁知道我如何也可以禁用复合材料中的元素?

4

1 回答 1

4

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>
于 2013-02-22T18:54:41.743 回答