2013-01-21 2 views
2

예 : 예에서는모델 뷰가 업데이트되기 전에 변환기가 항상 실행됩니까?

<h:form> 
    <h:selectOneMenu value="#{bean.timezone}> 
     <f:selectItems value="#{bean.availableTimezones} ... > 
     <f:ajax render="currenttime" /> 
    </h:selectOneMenu> 
</h:form> 

<h:form id="currenttime"> 
    <h:outputText value="#{bean.currentTime}" > 
     <f:convertDateTime dateStyle="short" type="both" timeZone="#{bean.timezone}" /> 
    </h:outputText> 
</h:form> 

<!-- bean.currentTime is of type 'Date' --> 

는 시간대를 변경하는 적절한 시간대에 표시 currenttime 텍스트를 야기한다. 그러나 그렇지 않습니다.

변환기가 "요청 적용"단계에서 계산되고 선택한 시간대 값이 "모델 업데이트"단계에서 업데이트되기 때문에 이러한 현상이 발생했다고 생각했습니다.

맞습니까? 이 용도로 변환기를 사용하지 않아야합니까?

감사합니다.

+0

인가 : 대안이 컨버터의 특성 rendertime 평가를 지원 OmniFaces <o:converter을 사용

<h:outputText value="#{bean.currentTime}" > <f:converter binding="#{bean.dateTimeConverter}" /> </h:outputText> 

private DateTimeConverter converter; @PostConstruct public void init() { converter = new DateTimeConverter(); converter.setDateStyle("short"); converter.setType("both"); } public DateTimeConverter getDateTimeConverter() { converter.setTimeZone(timezone); return converter; } 

? –

+0

예, 출력 텍스트가있는 양식과 다른 양식입니다. 주석은 Tnx로 질문을 업데이트합니다. – Ben

답변

6

구체화 문제는 <f:convertDateTime>이보기 작성 중에 초기화되고보기 렌더링 시간 (exactly like JSTL and so on)이 아니기 때문에 발생합니다. 실제로 이것은 업데이트 모델 값 단계 이전에 실행되므로보기 렌더링 시간 동안 사용자가 제출 한 시간대로 변환기가 설정되지 않습니다.

이 문제는 다음과 같은 답변에 대답으로 기본적으로 같은 이유가 있습니다

방법 중 하나 관리하고 빈의 속성으로 변환 인스턴스를 바인딩 . 또한 형태 selectOneMenu :

당신의 시간이
<h:outputText value="#{bean.currentTime}" > 
    <o:converter converterId="javax.faces.DateTime" dateStyle="short" type="both" timeZone="#{bean.timezone}" /> 
</h:outputText> 
+1

omnifaces <3 아무 것도 없습니다. 더 이상 사용할 수 없을 때 더 좋아합니다. 그것은 명백한 선택이되고 있습니다 –

+0

당신은 환영합니다 :) – BalusC

+0

전능적 인 것을 사용하고 있으며, 그것을 좋아해서 선택의 여지가 분명합니다 :-) – Ben

관련 문제