Bal*_*eth 7 jsf composite-component
我有以下复合组件:
<?xml version="1.0" encoding="UTF-8"?>
<ui:component xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:composite="http://java.sun.com/jsf/composite">
<composite:interface>
<composite:attribute required="true" name="field" />
<composite:attribute required="true" name="value" />
<composite:attribute required="false" name="size"/>
</composite:interface>
<composite:implementation>
...
<div class="wrapper">
<h:inputText value="#{cc.attrs.value}"
id="#{field.id}"
rendered="#{field.rendered}"
size="#{cc.attrs.size}">
</h:inputText>
<h:messages for="#{field.id}" styleClass="errorMessage"/>
</div>
...
</composite:implementation>
</ui:component>
Run Code Online (Sandbox Code Playgroud)
问题是,当我在没有设置其size属性的情况下使用此组件时,它仍然会像size=0在html输入元素中一样呈现.
我想要的是h:inputText只有当它具有有效值(例如,非空)时才渲染嵌套的属性.或者,如果没有显式覆盖嵌套元素的所有属性,我想公开它们的所有属性.
怎么可能?
Bal*_*usC 11
您可以使用JSTL <c:if>有条件地构建视图并<f:attribute>单独指定属性:
<h:inputText ...>
<c:if test="#{not empty cc.attrs.size}">
<f:attribute name="size" value="#{cc.attrs.size}" />
</c:if>
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
另一种方法是为复合组件属性指定默认值:
<cc:attribute name="size" required="false" default="10" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9761 次 |
| 最近记录: |