2012-06-21 2 views
1

나는 다음과 같이 이벤트 리스너와 <h:inputText> 있습니다태그 파일로 valueChangeListener 방법 식을 전달

<h:inputText valueChangeListener="#{myBean.handle}"/> 
내가로서 사용되는 태그 파일에 넣어 싶습니다

은 다음과 :

<my:itext changeListener="#{myBean.handle}" /> 

<h:inputText valueChangeListener="#{changeListener}" /> 

그러나이 속성으로 그것을 평가하는 것 : 태그 파일 내부와

대신 리스너 메소드로 사용됩니다. 어떻게 리스너 메소드를 태그 파일에 전달할 수 있습니까?

+0

즉, ''은 실제로 구성 요소가 아니라 태그 파일입니까? – BalusC

+0

예 @BalusC "itext"는 "my"라는 태그 공간에 정의되어 있으며 실제 구성 요소 (h : inputText)가 아닌 발신자 (my : itext ...를 작성) 외부에서 처리기를 지정해야합니다. – Giant2

+0

사용하고 있습니까? JSP 또는 Facelets? 어떤 버전입니까? – BalusC

답변

2

메서드 식을 태그 파일 특성으로 전달할 수 없습니다. 기본적으로 ValueExpression을 태그 파일 내부의 MethodExpression으로 변환해야합니다.

JSF 2.x Facelets의 경우 OmniFaces <o:methodParam>을 사용하여 해결할 수 있습니다.

<o:methodParam name="changeListenerMethod" value="#{changeListener}" /> 
<h:inputText valueChangeListener="#{changeListenerMethod}" /> 

그러나 기존 및 더 이상 사용되지 않는 Facelets 1.x 또는 JSP 2.x에는 기존 솔루션이 없습니다. 그러나 OmniFaces <o:methodParam>은 오픈 소스이므로 필요한 경우 Facelets 1.x 또는 JSP 용으로 복사하고 변경할 수 있어야합니다.

실제로 JSF 2.x를 이미 사용하고있는 경우 composite component을 사용할 수도 있습니다. 이것은 메소드 표현식을 <cc:attribute method-signature>으로 전달하는 것을 지원합니다. JSF 1.x의 경우 실제 사용자 정의 구성 요소를 만들 수도 있지만 이는 일부 XML보다 약간 더 효과적입니다.

+0

mmhmm을 사용하고 있습니다. valueChangeListener = "# {bean.changeListenerMethod}"는 bean이 메소드 changeListenerMethod (ValueChangeEvent e)를 필요로하며 그것을 사용합니다! "컨트롤러"를 전달하는 문제는 changeListenerMethod의 ValueChangeEvent 매개 변수가 전달되지 않아 valuechangeevent로 일부 작업을 수행 할 수 없다는 것입니다. 한숨! – Giant2

+0

구체적인 문제를 이해할 수 있을지 확실하지 않습니다. 나는 이미 그것에 대답했다. – BalusC

+0

죄송합니다 @BalusC하지만 다른 라이브러리 (자유 또는 공개)를 사용할 수 없습니다. 내 큰 구성 요소를 만들 것이라고 생각합니다. 나는 google에 guideliness를 찾을 것이다. – Giant2

관련 문제