JSF 2:在阶段侦听器上更改组件的呈现属性

时间:2011-09-30 18:26:13

标签: jsf-2 uicomponents phaselistener

Hy guys,

在JSF 2中如何使用PhaseListener更改h:InputText组件的呈现属性。

在渲染jsf页面之前,我必须验证h:inputtexts的所有id,之后我将更改要呈现的属性。

我清楚了吗?

1 个答案:

答案 0 :(得分:1)

在GET请求中,在渲染响应的前一阶段期间尚未创建视图根,并且在后期阶段,因为响应已经呈现并发送到客户端,所以为时已晚。但是,在“预渲染视图”系统事件期间,视图根可用于修改。

public class PreRenderViewListener implements SystemEventListener {

    @Override
    public void processEvent(SystemEvent event) throws AbortProcessingException {
        UIViewRoot root = (UIViewRoot) event.getSource();
        // ...
    }

    @Override
    public boolean isListenerForSource(Object source) {
        return true;
    }

}

要使其运行,请在faces-config.xml

中按如下方式注册
<application>
    <system-event-listener>
        <system-event-listener-class>com.example.PreRenderViewListener</system-event-listener-class>
        <system-event-class>javax.faces.event.PreRenderViewEvent</system-event-class>
    </system-event-listener>
</application>