复合组件的标签和 o:validateMultipleFields
Label of composite component and o:validateMultipleFields
我有以下复合组件,我想使用 o:validateMultipleFields(更具体地说是 o:validateAllOrNone)。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:composite="http://java.sun.com/jsf/composite"
>
<composite:interface>
<composite:attribute name="target" />
<composite:attribute name="label"/>
<composite:attribute name="value" />
<composite:attribute name="required" />
<composite:attribute name="size" />
<composite:attribute name="disabled" />
<composite:attribute name="styleInput" required="false" />
<composite:editableValueHolder name="input" targets="input" />
<composite:clientBehavior name="change" event="change" targets="#{cc.attrs.target}" />
<composite:clientBehavior name="keypress" event="keypress" targets="#{cc.attrs.target}" />
</composite:interface>
<composite:implementation>
<p:outputLabel id="label" for="input" value="#{cc.attrs.label}" />
<h:panelGrid columns="3">
<p:inputText id="input" value="#{cc.attrs.value}"
style="#{cc.attrs.styleInput}" size="#{cc.attrs.size}"
disabled="#{cc.attrs.disabled}" required="#{cc.attrs.required}">
</p:inputText>
<p:message for="input" display="icon">
<p:effect type="pulsate" event="load" delay="500" />
</p:message>
</h:panelGrid>
</composite:implementation>
</html>
验证按预期进行,但 components
属性 上指定的组件标签未显示。相反,它显示的是组件 ID。
<cetcomp:editar id="origem" label="Origem" size="10" />
<cetcomp:editar id="cst" label="CST" size="10" />
<o:validateAllOrNone id="origemCst" components="origem:input cst:input" showMessageFor="origem:input" />
ValidateMultipleFields
从物理输入组件的 label
属性中提取标签。正是那些将在标准 JSF 验证中使用的标签。你确实有none,它们只设置在<p:outputLabel>
.
相应地添加它们:
<p:inputText ... label="#{cc.attrs.label}">
另一种方法是使用 <o:outputLabel>
而不是 <p:outputLabel>
,因为 OmniFaces 会自动将标签复制到关联的输入组件。
<o:outputLabel ... for="input" value="#{cc.attrs.label}" />
<p:inputText id="input" ... />
Update: 结果发现其实还是不行。 #{cc}
在 ValidateMultipleFields
提取标签时不可用。这是根据 issue 134 修复的,它将在 OmniFaces 2.1 中可用。
我有以下复合组件,我想使用 o:validateMultipleFields(更具体地说是 o:validateAllOrNone)。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:composite="http://java.sun.com/jsf/composite"
>
<composite:interface>
<composite:attribute name="target" />
<composite:attribute name="label"/>
<composite:attribute name="value" />
<composite:attribute name="required" />
<composite:attribute name="size" />
<composite:attribute name="disabled" />
<composite:attribute name="styleInput" required="false" />
<composite:editableValueHolder name="input" targets="input" />
<composite:clientBehavior name="change" event="change" targets="#{cc.attrs.target}" />
<composite:clientBehavior name="keypress" event="keypress" targets="#{cc.attrs.target}" />
</composite:interface>
<composite:implementation>
<p:outputLabel id="label" for="input" value="#{cc.attrs.label}" />
<h:panelGrid columns="3">
<p:inputText id="input" value="#{cc.attrs.value}"
style="#{cc.attrs.styleInput}" size="#{cc.attrs.size}"
disabled="#{cc.attrs.disabled}" required="#{cc.attrs.required}">
</p:inputText>
<p:message for="input" display="icon">
<p:effect type="pulsate" event="load" delay="500" />
</p:message>
</h:panelGrid>
</composite:implementation>
</html>
验证按预期进行,但 components
属性 上指定的组件标签未显示。相反,它显示的是组件 ID。
<cetcomp:editar id="origem" label="Origem" size="10" />
<cetcomp:editar id="cst" label="CST" size="10" />
<o:validateAllOrNone id="origemCst" components="origem:input cst:input" showMessageFor="origem:input" />
ValidateMultipleFields
从物理输入组件的 label
属性中提取标签。正是那些将在标准 JSF 验证中使用的标签。你确实有none,它们只设置在<p:outputLabel>
.
相应地添加它们:
<p:inputText ... label="#{cc.attrs.label}">
另一种方法是使用 <o:outputLabel>
而不是 <p:outputLabel>
,因为 OmniFaces 会自动将标签复制到关联的输入组件。
<o:outputLabel ... for="input" value="#{cc.attrs.label}" />
<p:inputText id="input" ... />
Update: 结果发现其实还是不行。 #{cc}
在 ValidateMultipleFields
提取标签时不可用。这是根据 issue 134 修复的,它将在 OmniFaces 2.1 中可用。