<ui:repeat value="#{prodCtr.paginator.model}" var="o">
<h:form>
<h:commandLink id="#{o.id}" action="ModelInfo.xhtml" actionListener="#{prodCtr.listener}">
<h:panelGrid columns="1" style="border: #ffffff">
<img src="resources/images/#{o.id}.jpg" style="width: 100px;height: 100px"/>
<h:outputLabel value="#{o.price} YTL" style="font-size: 12px;font-family: Georgia, Serif;color: #ff3300" />
<h:commandButton value="Sifaris et" class="button"/>
</h:panelGrid>
</h:commandLink>
</h:form>
</ui:repeat>
在处理RENDER_RESPONSE 6期间捕获到java.lang.IllegalArgumentException:UIComponent-ClientId =,此处不允许Message = Empty id属性
我如何才能使用CommandLink id dinamically?还有其他方法吗?
答案 0 :(得分:0)
使用id
标记时, 不需要为子组件指定<ui:repeat/>
属性。它会自动执行此操作。
如果您确实希望控制id
属性,<ui:repeat/>
是错误的用途。原因是在组件被放置在UIViewroot
的时间点(基本上是第一次构建页面时),<ui:repeat/>
组件不活动,即它不是处理。因此var="o"
不可用于运行时,因此没有任何内容可用作id
。
要控制id
,您应该使用<c:forEach/>
标记。您的代码应如下所示:
<c:forEach items="#{prodCtr.paginator.model}" var="o">
<h:form>
<h:commandLink id="#{o.id}" action="ModelInfo.xhtml" actionListener="#{prodCtr.listener}">
<h:panelGrid columns="1" style="border: #ffffff">
<img src="resources/images/#{o.id}.jpg" style="width: 100px;height: 100px"/>
<h:outputLabel value="#{o.price} YTL" style="font-size: 12px;font-family: Georgia, Serif;color: #ff3300" />
<h:commandButton value="Sifaris et" class="button"/>
</h:panelGrid>
</h:commandLink>
</h:form>
</c:forEach>