我如何在JSF中的Controller中单击CommandLink id?

时间:2013-10-12 19:10:22

标签: jsf-2.2

<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?还有其他方法吗?

1 个答案:

答案 0 :(得分: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>