2012-01-23 2 views
0

JSF 2 응용 프로그램에서 selectOneMenu를 사용하여 사용자가 한 달에 하루를 선택할 수있게했습니다. 웬일인지 "Select Day"라는 레이블이 나타나지 않습니다. 이것은 내가 뭐하는 거지입니다 :JSF2의 항목 lable selectOneMenu

<h:selectOneMenu id="startDay" value="#{bean.day}">  
    <f:selectItem itemLabel="Select Day" itemValue=""/> 
    <f:selectItems value="#{bean.days}"/> 
</h:selectOneMenu> 

빈의 코드는 다음과 같다 :

days = new LinkedList<Integer>(); 
for(int i=1; i<=31; i++) { 
    days.add(i);    
} 

모든 : 나는 @PostConstruct 초기화 방법에 인스턴스화하고있어

private int day; 
private List<Integer>days; 

잘 작동하지만 값은 "1"이 아닌 "Select Day"로 표시됩니다. 위의 태그에서 다양한 변형을 시도했지만 아무 효과가 없습니다. 내가 뭘 놓치고 있니?

편집 :이 제대로 작동

years = new LinkedList<Integer>(); 
for(int i=2012; i<=2020; i++) { 
    years.add(i);   
} 

보여주는으로 "연도 선택": 나는 또한 이처럼 2012 년부터 같은 방법으로하지만, 루프 초기화 년 표시 유사한 위젯을 가지고 예상했다. 1에서 시작하는 인스턴스화 루프의 문제점은 무엇입니까? 그렇다면 해결 방법은 무엇입니까?

+0

은 (는) primefaces 버전의 버그처럼 보입니다. 안정적인 버전이나 새로운 버전을 사용해보십시오 ... 작동해야합니다. http://www.primefaces.org/showcase/ui/selectOneMenu.jsf – Daniel

+0

사용중인 JSF 및 서버 버전 JSF 2.1 (2.1.1.FCS)과 Tomcat 7을 사용해 보았을 때 첫 번째 값은 'Select Day'로 표시됩니다. @ Daniel 어떻게 결론 지었습니까? –

+1

user458248 바람둥이 7과 myface 2.1.4를 사용하고 있습니다. Daniel,이 페이지의 주요 부분이 아닙니다. 나는 몇 가지 정보를 추가하는 질문을 업데이 트하고 있습니다. – Herzog

답변

1

코드가 지금까지 멋지게 보입니다. 앞에서 설명한 "문제"는 정확히 항목 값으로 <h:selectOneMenu value>을 미리 초기화 한 경우에 발생합니다. 귀하의 경우에는 day의 값을 코드의 어딘가에 1으로 설정했을 가능성이 큽니다. 예를 들어,

private int day = 1; // Instead of default 0. 

또는

public Bean() { 
    setDay(1); 
} 

이렇게요.


업데이트 : 나는 모두 편집 페이지를 사용하여, 새로운 경매를 입력 해요 때문에 나는 이런 식으로했고 나는 확인하고 싶었다

: 귀하의 의견에 따라 새 경매에 참여하기 위해 페이지로 돌아올 때 다른 경매가 수정되면 수정 된 경매의 가치가 삭제됩니다. 그러나 그 점 이외에, 나는 그것으로 무엇을 해야할지 알아낼 것입니다.

빈을 세션 범위 대신보기 범위에 두십시오. 세션 범위가 입력 양식의 잘못된 범위입니다. 로그인 된 사용자, 환경 설정 등과 같이 세션 지정 데이터에만 사용되어야합니다. Communication in JSF2 - Managed bean scopes을 참조하십시오.

+0

그래, 1로 설정 했어. 0으로 설정하면 내가 필요로하는 것이 이루어진다. ViewScoped에 관해서, 나는 어떻게 검증을 다룰 것인가? 예를 들어 사용자가 과거에 경매를 시작하려고하면 다시보고해야합니다. 뷰 범위를 사용하면 필드가 다시 초기화되므로 사용자가 처음부터 양식을 채우도록 강요합니다. 해결책이 있습니까? (뷰 범위를 사용하고 세션에서 메모리를 줄이는 것을 좋아합니다.) – Herzog

+1

작업 범위 메소드에서'null' 또는'void'를 반환하는 한 뷰 범위 bean을 모든 포스트 백에서 다시 초기화해서는 안됩니다. 그러나 [bug 1492] (http://java.net/jira/browse/JAVASERVERFACES-1492)로 인해 속성의 속성 중 하나를 태그 핸들러 속성에 바인딩하면 뷰 범위 bean이 수행합니다. [이 기사] (http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html#ViewScopedFailsInTagHandlers)를 확인하고 그에 따라 태그 핸들러를 제거/교체하여 코드를 수정하십시오. – BalusC

+0

감사합니다. BalusC. 반환 값을 null로 변경하고 ViewScoped처럼 아름답게 작동합니다. 나는 이것이 응용 프로그램의 메모리 요구를 더 작게 만들고 있다고 정확하게 가정합니까? 아, 아직 JSF 개발자를 만들 것입니다 :) – Herzog