2014-10-30 3 views
2

기본적으로 하나의 복합 비헤이비어 (onBlur 및 onKeyUp)에 두 개의 AjaxFormComponentUpdatingBehaviors가 생성되었습니다. http://tny.cz/0ff0ead2Wicket 복합 비헤이비어

이 비헤이비어가 추가 된 구성 요소를 렌더링 할 때 "[해당 비헤이비어 _가이 구성 요소에 등록되지 않았습니다."라는 예외가 발생합니다. 예외는 동작의 onComponentTag()에서 blur.onComponentTag() 메서드가 호출 될 때 발생합니다.

이유는 무엇입니까? Wicket 1.4.21을 사용하고 있음을 언급해야합니다.

감사합니다,

+2

시도가'blur.bind (구성 요소)'와'keyUp.bind (부품 교체)'와'component.add (blur, keyUp)'를 비교합니다. –

+0

좋아요! 그게 효과가 있었어. 고마워요 @MichaelZhavzharov. 내가 그것을 upvote 수있는 질문에 답변을 표시 할 수 있도록 귀하의 의견을 답변에 이동 하시겠습니까? –

+0

당신이 원했던 것처럼 ok :) –

답변

1
당신 복합 행동의 #bind() 방법에서

@Sven 이미 언급 한 바와 같이이 behaviors에 대한 component에 링크를 생성하기 때문에 당신이 트릭을하는 것만으로는 충분하지이 메서드를 호출, 당신의 blurkeyUp 또 다른 #bind() 메소드를 호출하지만,하지만 component 아직도 그들에 대해 아무것도 몰라요.

component.add(behaviors)으로 전화하면 모든 행동에 대해 #bind() 개의 방법이 내부 호출됩니다. 그리고 이것이 실제로 필요한 것입니다.

그래서

, 단지 대체 :

blur.bind(component); 
keyUp.bind(component); 

에 따라 :

component.add (blur, keyUp); 
+1

글쎄, 나는 두 분의 답을 모두주고 싶지만 마이클의 의견을 먼저 보았습니다. 너희 둘에게 고마워. –

2

예외는 RequestCycle # URLFor의()에서 유래 :

public final CharSequence urlFor(final Component component, final IBehavior behaviour, 
    final RequestListenerInterface listener) 
{ 
    int index = component.getBehaviorsRawList().indexOf(behaviour); 
    if (index == -1) 
    { 
     throw new IllegalArgumentException("Behavior " + this + 
      " was not registered with this component: " + component.toString()); 
    } 

마이클 이미 주석으로, 당신의 포장 행동이 바로 호출 구성 요소에 추가 할 수 있습니다 #bind()가 충분하지 않습니다.

관련 문제