우리는 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
그것은 더에서 MyFaces의 버그처럼 보인다. Mojarra 구현과 같은 몇 가지 문제가 있었지만 MyFaces와 비슷한 상황 일 수 있습니다. 다른 (최신) 버전의 MyFaces를 사용해보십시오. 가능한 경우 문제가 JSF impl의 특정 항목으로 인해 발생하는지 확인하기 위해 Mojarra 구현을 시도하십시오. – Andrey
@Andrey : 댓글을 주셔서 감사합니다. 위에서 언급 한 두 가지 문제, [email protected] 인쇄 및 잘못된 HTML 마크 업 중 무엇이 문제입니까? – Atul
잘못된 마크 업에 대해서 h : commandLink는 요소를 두 번 생성합니다. – Andrey