2014-01-22 1 views
0

우리는 jsf 1.2에서 jsf 2로 업그레이드하고 있습니다. 우리는 아파치 myfaces 2.1과 rich faces 4.3을 사용하고 있습니다.c : forEach를 JSF 태그로 대체하는 가장 좋은 방법

<h:form> 
<h:panelGroup id="myMenu_type"> 

    <div id="myMenu"> 
     <ul> 
     <c:forEach items="#{bean.data}" var="val"> 
       <li> 
        <h:commandLink value="#{val.label}" action="#{val.performAction}"/>                              
       </li> 
     </c:forEach> 
     </ul> 
    </div> 
</h:panelGroup> 
</h:form> 

내가 위에서 XHTML 코드를 중복 ID 오류가 점점 오전 :

아래는 XHTML 코드입니다. 생성 된 앵커 링크 태그 <a>은 위의 코드에 대해 중복 ID를 가져옵니다. 대해 forEach를 내가 혼합 JSTL과 JSF 나는대로이 중복 된 ID 오류를주고있다 의심부터 :

내 질문은 내가 다 제거 할 것이다.

위의 구문을 대체하는 가장 좋은 JSF 방식은 무엇입니까? 나는 그것을 부자와 함께 시도하고있다 : dataTable. 더 좋은 대안이 있습니까? 상담하십시오. 이상한 부분은 동일한 코드를 사용하면 JSF 1.2에서는 문제가 발생하지 않는다는 것입니다.

편집 1 : 나는 <rich:list>뿐만 아니라 <a4j:repeat> 아래 가 XHTML 코드

<div id="myMenu"> 
        <rich:list value="#{bean.data}" var="val"> 
         #{val} 
        </rich:list> 
     </div> 

에게있는 그대로 내가 #{val}를 인쇄 할 때 이상한 것은, 그것으로 나에게 가치를 제공되었는지를 사용하여 시도

[email protected] 반면 val은 보통 사용자 지정 개체입니다. 위의 문제로 인해 val에 어떤 메소드도 호출 할 수 없으며 javax.faces.component.UIViewRoot 오류 유형에서 'xx'속성을 찾을 수 없습니다. <c:forEach>을 사용하면 위의 오류가 발생하지 않습니다.

편집 2 :

나는 중복 ID 오류가 오는 곳의 명확한 아이디어를 제공 위의 XHTML 코드를 생성 된 HTML을 부착하고있다.

<tr><td> 

    <span id="form:myMenu_type"> 
    <a href="#" onclick="return myfaces.oam.submitForm(id1);">One</a> 
    <a href="#" onclick="return myfaces.oam.submitForm(id2);">Two</a> 
    <a href="#" onclick="return myfaces.oam.submitForm(id3);">Three</a> 
    <a href="#" onclick="return myfaces.oam.submitForm(id4);">Four</a> 
    <a href="#" onclick="return myfaces.oam.submitForm(id5);">Five</a> 
    <a href="#" onclick="return myfaces.oam.submitForm(id6);">Six</a> 
       <div id="myMenu"> 
          <ul> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id1);">One</a> 
            </li> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id2);">Two</a> 
            </li> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id3);">Three</a> 
            </li> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id4);">Four</a> 
            </li> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id5);">Five</a> 
            </li> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id6);">Six</a> 
            </li> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id7);">Seven</a> 
            </li> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id8);">Eight</a> 
            </li>        
          </ul> 
        </div> 
    </span>  
</td></tr> 

그래서 위의 코드와 같이 올바른 형식 아래에 생성 된 앵커 링크 태그 <a>는 : myMenu_type 진짜 문제입니다. 그것의 id는 <li>을 명시 적으로 사용하고 있기 때문에 정확히 동일합니다. <li> - 올바른 것입니다. 앵커 태그가 생성되는 이유가 실제 문제입니다. <c:forEach> 내부에 ID를 동적으로 할당하더라도 동일한 중복 ID 오류를 제공하는 위의 링크는 <a>에 할당됩니다. 문제를 설명하기 위해 더미 ID를 사용했습니다. 실제 ID는에서 MyFaces

+0

그것은 더에서 MyFaces의 버그처럼 보인다. Mojarra 구현과 같은 몇 가지 문제가 있었지만 MyFaces와 비슷한 상황 일 수 있습니다. 다른 (최신) 버전의 MyFaces를 사용해보십시오. 가능한 경우 문제가 JSF impl의 특정 항목으로 인해 발생하는지 확인하기 위해 Mojarra 구현을 시도하십시오. – Andrey

+0

@Andrey : 댓글을 주셔서 감사합니다. 위에서 언급 한 두 가지 문제, [email protected] 인쇄 및 잘못된 HTML 마크 업 중 무엇이 문제입니까? – Atul

+1

잘못된 마크 업에 대해서 h : commandLink는 요소를 두 번 생성합니다. – Andrey

답변

0

△ ▽를 사용하여 생성 한 동적 식별자입니다 : JSF

의 반복

예 :

<ui:repeat value="#{productMB.products}" var="product"> 
<table class="cart"> 
    <tr> 
    <td class="image"> 
     <div id="image_container"> 
     <img title="#{product.type} #{product.mark} #{product.family} #{product.subfamily} #{product.model} #{product.partNumber}" src="#{product.imageURL}"/> 
     </div>   
    </td> 
    </tr> 
</table> 
</ui:repeat>