我遇到了一个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}'有关。
现在的问题是:如何为绑定属性创建唯一标识符?
我很感激任何提示。谢谢!
答案 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>