2011-03-15 6 views
0

날짜 필드에 변환기 및 메시지 태그를 사용하지 않도록 사용자 정의 jsf2 구성 요소를 만들려고합니다. 템플릿을 사용하여 Icefaces 1.x에서이 작업을 수행했습니다. 하지만 JSF 2에서는 복합 컴포넌트를 사용해야했습니다. 그것은 내가 바라는 것뿐만 아니라가는 것입니다.Icefaces 2.0 : 얼음 문제 : selectInputDate 내부 사용자 정의 구성 요소

는 복합 컴포넌트가 성공적으로 생성되었다 : 속성이 null 예상대로

<composite:interface> 
    <composite:attribute name="style" /> 
    <composite:attribute name="partialSubmit" /> 
    <composite:attribute name="rendered" /> 
    <composite:attribute name="immediate" /> 
    <composite:attribute name="value" required="true" /> 
    <composite:attribute name="pattern" required="true" /> 
</composite:interface> 

<composite:implementation> 
    <ice:panelGroup rendered="#{cc.attrs.rendered}"> 
     <ice:selectInputDate value="#{cc.attrs.value}" 
      style="#{cc.attrs.style}" id="input" renderAsPopup="true" 
      partialSubmit="#{cc.attrs.partialSubmit }" 
      immediate="#{cc.attrs.immediate }"> 
     </ice:selectInputDate> 
     <ice:message for="input" style="color: red; display: block"></ice:message> 
    </ice:panelGroup> 
</composite:implementation> 

이 컴포넌트의 동작. 그러나 내 데이터베이스에서 데이터를로드하면 java.sql.Date 인스턴스가 생깁니다. (내 개체가 java.util.date를 사용한다는 사실에도 불구하고 전자는 후자를 확장합니다)

java.lang.IllegalArgumentException가 : 클래스 에 유형 java.util.Date 클래스의 03/03/11 20:00 변환 할 수 없습니다 java.sql.Date

어떤 이상한 것은 그 내가 사용하는 경우 얼음 : 내 복합 구성 요소 외부 selectInputDate, 그 오류가 발생하지 않습니다. 어떤 아이디어?

+0

궁금한 점 : 왜 복합 컴포넌트를 만들지 않았습니까? 이 결정이 상위 레벨에서 나오거나 어떤 이유로 더 이상 IceFaces 2.0에서 템플릿을 사용할 수 없습니까? – BalusC

+0

템플릿을 사용할 수 있습니다. 그러나 입력 구성 요소로 기존 템플릿을 사용하면 문제가 발생했습니다. 반복되는 구성 요소 ID 예외가 계속 발생했습니다. 일하기 위해 노력하면서 하루를 낭비 한 후에, 나는 새로운 접근법으로 나아 가기로 결정했다. 그리고 또 다른 날이 있습니다 ... :) – Andre

+0

클래스 패스 지옥 같은 곳이 아니 었는지 확인하기 위해 Tomcat 7에서 IceFaces 2.0을 사용하여 테스트 프로젝트를 만들었습니다. java.util .date 필드에 저장하고 java.sql.date의 인스턴스를 할당합니다. ** 문제 **가 재현 될 수 있습니다. 버그처럼 보입니다 ... – Andre

답변

0

좋아, 이건 너무 극단적 인 해결 방법으로 보일지도 모릅니다. Tomcat을 재구성하는 것입니다. 나는 tomcat이 JSF 나 ICEFaces처럼 자주 변경되지 않는다고 생각했다. 당신이해야하는 경우에 그것을 거칠게 부르십시오; 그것은 내 문제를 해결 ...

사용중인 버전에 대한 톰캣 소스를 다운로드하고 ELSupport.java라는 파일을 찾습니다. 이 서명과 방법을 찾으십시오 : 그것은 꽤 많은 단지 경우에 슬로우되는 예외를 방지

if (java.util.Date.class.isAssignableFrom(obj.getClass())){ 
    return obj; 
} 

:

public static final Object coerceToType(final Object obj, 
     final Class<?> type) throws ELException { 

지금 바로 ELException을 던져 선 위에, 그 다음 줄을 추가 객체는 java.util.Date의 하위 클래스의 인스턴스입니다.

누군가가 이것이 Tomcat 프로젝트에 기여한 것이라고 생각합니까? 나는 오픈 소스에 전혀 기여한 적이 없어서 실제로 어떻게 작동하는지 모르겠습니다.

관련 문제