2012-01-06 4 views
0

내 bean은 viewscoped입니다. getter와 setter가있는 간단한 문자열 속성이 있습니다. getter는 잘 동작하지만 (속성을 초기화하여 확인) setter는 작동하지 않습니다. setter 메서드에서 들어오는 각 매개 변수를 사용하여 Stringbuffer를 구축하고 있습니다.빈 특성이 갱신되지 않습니다.

코드 :

public String getParamval() { 
    return paramval; 
} 

public void setParamval(String paramval) { 
    logger.info("Incoming value:" + paramval); 
    pvals.append(paramval); 
    this.paramval = "VAL"; 
} 

는 잘못인가? setter 내에서 입력 문자열이 전달되고 있는지 확인하기 위해 테스트했지만 메서드가 호출되거나 호출되지 않는 것 같습니다. 보기에서 # {} 표기법을 사용하고 있습니다.

보기 :

<c:forEach items="${gdsiGeodataBean.requiredfields}" var="reqs"> 
     <h:outputLabel value="#{reqs}:* " /> 
     <pou:inputText value="#{gdsiGeodataBean.paramval}" required="true" requiredMessage="Input is required."/> 
</c:forEach> 

그리고 왜 내가 setter 메소드에서 StringBuffer를 구축 싶은 것? 왜냐하면 입력 텍스트는 동적 목록을 기반으로 동적으로 만들어지기 때문입니다. 바인딩 할 bean 속성이 하나뿐입니다.

지도를 사용할 수는 있지만 위와 같은 이유 때문에 setter 메서드에서지도 값을 업데이트 할 수없는 것처럼 보입니다. 이것은 내가 여기에서 질문 한 것과 관련이 있습니다 Updating a map value in a managed bean

답변

3

접근 방식이 완전히 잘못되었지만 (양식을 제출 한 후에 getter가 올바른 값을 반환하지 않더라도)지도 사용에 대해 이미 previous question에 응답했습니다. ,이 특별한 경우에 setter가 실제로 호출되어야합니다.

setter가 호출되지 않은 경우 여러 가지 원인이있을 수 있습니다. 가장 유명한 것은 양식이 <h:form> 안에 있지 않거나 서로 <h:form>을 서로 중첩하지 못한다는 것입니다. 또 다른 원인은 입력 구성 요소 또는 부모 중 하나가 rendered 특성을 가지고 있으며 제출 요청 중에 false을 평가하는 것입니다.

+0

마법사 구성 요소가 대화 구성 요소 내에있는 내에 있습니다. 이 양식이나 대화 상자 구성 요소에는 다른 양식이 없습니다. 뷰에는 렌더링 된 특성이 false로 설정된 곳이 없습니다. 나는 이것을 확인하기 위해 viewtree를 점검 할 필요가 있다고 생각한다. – algone

+0

이상한 일이 일어나고 있습니다. 태그를 태그로 바꿨고 이제 setter가 작동합니다. 이게 왜 그렇게? – algone

+0

보기 렌더링 시간 표현식에 의존하고있는 것 같습니다. 긴 이야기 짧은 : http://stackoverflow.com/questions/3342984/jstl-in-jsf2-facelets-makes-sense – BalusC

관련 문제