如何在jsf嵌入复合组件后从ViewHandler中禁用元素?

时间:2013-02-22 16:47:39

标签: jsf facelets composite-component

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

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

有没有人知道如何禁用复合中的元素?

1 个答案:

答案 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