JSF 2复合和绑定验证

时间:2011-10-10 07:46:13

标签: java jsf-2 composite-component

我遇到了一个JSF复合问题,它验证了内部输入字段。 只要包含一个复合,代码片段就会起作用。

  
<div id="#{cc.clientId}" >
  <h:panelGroup styleClass="#{not firstname.valid ? 'fmError' : ''}">
    <div class="col220">
        <h:outputLabel for="firstname" value="Vorname(n):" />
    </div>
    <div class="col220">
        <h:inputText id="firstname" styleClass="fmTxt " 
            value="#{cc.attrs.person.firstname}" binding="#{firstname}">
            <f:validateRequired />
        </h:inputText>

    </div>
  </h:panelGroup>
</div>

正如您所看到的,我使用cc.clientId来包装复合并为复合内部的组件提供唯一ID。因此,可以在一个页面上包含多个复合材料。

问题始于验证和绑定inputText组件的需要。我需要这个来询问panelGroup中的验证结果,不仅突出显示inputField而且突出显示标签。

当在页面上仅使用一个复合时,此代码工作正常。使用第二个时,不再显示inputField的'firstname'。我想这与绑定及其硬编码'#{firstname}'有关。

现在的问题是:如何为绑定属性创建唯一标识符?

我很感激任何提示。谢谢!

1 个答案:

答案 0 :(得分:3)

我建议创建一个具有唯一ID的别名,并将其存储在请求范围内。

<div id="#{cc.clientId}">
  <ui:param name="firstname" value="#{cc.clientId}_firstname" />
  <h:panelGroup styleClass="#{not requestScope[firstname].valid ? 'error' : ''}">
    <div class="col220">
        <h:outputLabel for="firstname" value="Vorname(n):" />
    </div>
    <div class="col220">
        <h:inputText id="firstname" styleClass="fmTxt " 
            value="#{cc.attrs.value}" binding="#{requestScope[firstname]}">
            <f:validateRequired />
        </h:inputText>

    </div>
  </h:panelGroup>
</div>