html5标签上的JSF条件属性

wut*_*aer 5 jsf jsf-2.2

嗨,我的jsf页面中有一个"fieldset"标签

现在我需要有条件地添加"禁用"属性

我有一个解决方案,但它非常难看:

<h:outputText escape="false" value="&lt;fieldset disabled='disabled'&gt;" rendered="#{surveysHandler.surveyRunning}" />
<h:outputText escape="false" value="&lt;/fieldset&gt;" rendered="#{surveysHandler.surveyRunning}" />
Run Code Online (Sandbox Code Playgroud)

有一个很酷的jsf 2.2方法吗?

Mic*_*chi 3

是的,有一个很酷的新 JSF 2.2 方法可以实现这一点!

您可以创建fieldset一个 JSF 2.2 passthrough 元素并向其传递一个属性映射,如下所示:

<fieldset jsf:id="fieldset">
    <f:passThroughAttributes value="#{customerBean.params}"/>
</fieldset>
Run Code Online (Sandbox Code Playgroud)

该前缀jsf适用于新的 JSF 2.2 名称空间http://xmlns.jcp.org/jsf。如果 HTML 标记在此名称空间中具有任何属性,JSF 会将其转换为组件树中真正的 JSF 组件。因此,可以f:passThroughAttributes在托管 bean 中添加来自映射的属性。

params 属性的 getter 可能如下所示(您可以根据 bean 中的任何条件添加属性):

public Map<String, String> getParams() {
    HashMap<String, String> params = new HashMap<String, String>();
    if (disabled) {
        params.put("disabled", "disabled");
    }
    return params;
}
Run Code Online (Sandbox Code Playgroud)

有关直通属性和元素的更多信息,请参阅我的有关JSF 2.2 的 HTML5 友好标记的博文。