0
<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>

java.lang.IllegalArgumentException 在处理 RENDER_RESPONSE 6 期间捕获:UIComponent-ClientId=, Message=Empty id 属性在这里不允许

我怎样才能动态地使用 CommandLink id?还有其他方法吗?

4

1 回答 1

0
  1. 使用标签时不需要为子组件指定id属性。<ui:repeat/>它会自动执行此操作。

  2. 如果您确实想控制该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>
    
于 2013-10-13T17:13:18.560 回答