2009-05-12 3 views
3

HashMap에서 반복적으로 문제를 일으켜 화면에 값을 출력하고 있습니다. 누군가 내가 잘못하고있는 것을보기 위해 코드를 다시 검사 할 수 있습니까? 나는 잘못된 것을 발견 할 수는 없지만 뭔가 있어야합니다. 서블릿에서 JSF, MyFaces & Facelets을 사용하여 HashMap을 반복하는 데 어려움이 있습니다.

, 내가 요청에 다음과 같은 추가 오전 :

Map<String, String> facetValues = new HashMap<String, String>(); 
// Filling the map 
req.setAttribute(facetField.getName(), facetValues); 

한 경우 "facetField.getName()"를 "훈련"에 평가합니다. 그래서 내 페이지에는 다음과 같은 것들이 있습니다 :

<ui:repeat value="${requestScope.discipline}" var="item"> 
    <li>Item: <c:out value="${item}"/>, Key: <c:out value="${item.key}"/>, Value: <c:out value="${item.item}"/></li> 
</ui:repeat> 

루프는 한 번 실행되었지만 모든 출력은 공백입니까? 한 번 루프를 넘었다면 적어도 아이템에 어떤 것을 기대했을 것입니다. Facelets에 대한 디버그 팝업을 확인하면, 규율이 루프에 있습니다. 나에게지도처럼 보이는 뭔가 화면 결과에 인쇄 (I 출력을 단축했습니다) : 나는 또한 C와 시도했습니다

{300=0, 1600=0, 200=0, ... , 2200=0} 

: 대해 forEach하지만이 같은 결과를 얻고있다. 그럼 내가 잘못 생각하는 사람이 누구일까요? 모든 입력에 대한

감사합니다, 리

+0

지도에서 각 항목에 대해 "항목 :, 키 :, 값 :"이 보이나요? (실제 값은 인쇄되지 않습니다)? – mtpettyp

+0

모든 값에 해당하는 것은 아닙니다. 루프는 단지 한 번만 반복됩니다. 하지만 난 꽤 HashMap 루프에 전달 확신 해요. –

답변

10

<ui:repeat>은 집합 또는지도가 아닌 목록 또는 DataModel 만 허용합니다. 이것은 JSF 2.1의 로드맵에 있습니다.

1

세 가지가 나에게 발생합니다

1.

documentation for ui:repeat 그것을 말하지 않는다 (이것은 단지 말한다 목록)하지만, 내가 볼 UIRepeat는 DataModel을 모델로 사용합니다 (h : dataTable 방식). 은 자동으로 데이터 모델 유형으로 랩핑되지 않습니다. 유형은 내재적으로 지원되지 않습니다. 값을 자신의 DataModel 구현의 인스턴스로 만들거나 암시 적으로 지원되는 유형 (예 : java.util.List)으로 제공해야합니다.

2.

는 당신이 매핑이 값을 의도가 무엇인지 확실하지 오전 :

${item} 
${item.key} 
${item.item} 

당신이 유형 목록 <의 Map.Entry < 문자열, 문자열의 수 "훈련"을 변경하는 경우 > >, 당신은 key and value 속성에 바인딩 할 수 있습니다 :

${item.key} 
${item.value} 

당신과 같이 목록을 만들 수 있습니다

Map<String, String> facetValues = new HashMap<String, String>(); 
// Filling the map 
List<Map.Entry<String, String>> discipline 
     = new ArrayList<Map.Entry<String, String>>(facetValues.entrySet()); 

3.

JSTL 태그는 요소 트리 작성시 평가되는 FAQ suggests. 나에게 ui : repeat의 자식으로 c : out을 사용할지 여부가 제대로 작동하는지 여부는 분명하지 않습니다. 대신 h : outputText를 사용해야 할 수도 있습니다. (나는 이것에 대해 잘못 될 수있다. 물론 나는 그것을 시도하지 않았다.) 서블릿에서


, 나는 JSF의 요청 범위에 뭔가를 넣어 이상한 방법처럼 들린다 요청

에 다음을 추가하고,하지만 난 당신을 신뢰합니다 니가하는 일을 알아라!

12

(el 2.2 지원) 아래와 같이 맵을 반복 할 수 있습니다.

<ui:repeat value="#{myBean.stats.keySet().toArray()}" var="x"> 
    <h:outputText value="#{myBean.stats.get(x)}" /><br /> 
</ui:repeat> 
+0

건배 Berkay, 나에게 많은 번거 로움을 덜어 줬어. –

관련 문제