2014-12-16 2 views
1

그래서 <c:set>을 사용하여 개체 값을 설정합니다. 문제는 동일한 이름을 가진 두 개의 setter 메소드가 있으며 잘못된 메소드가 호출된다는 것입니다. 우리는 ${paramValues.tag} 여기에 정의 된 문자열 배열 (http://docs.oracle.com/javaee/1.3/api/javax/servlet/ServletRequest.html#getParameterValues(java.lang.String)) 인 것을 알고, 이제JSTL c : 빈 속성을 배열로 설정하면 잘못된 설정 메서드가 호출됩니다.

<c:when test="${not empty paramValues.tag }"> 
    <c:set target="${listing }" property="tags" value="${paramValues.tag }" /> 
</c:when> 

: 내 JSP에서

나는이 있습니다. 내가 ${paramValues.tag}를 출력하여이를 확인하고 난 다음 한 내 자바 클래스에서 foreach 루프 <c:forEach var="test" items="${paramValues.tag}">

를 사용하여 값을 반복 할 수 있었다있다 :

public void setTags(final String tagName) { 
    LOG.debug("Setting tags from single tag string"); 
    this.setTags(Arrays.asList(tagName)); 
} 

public void setTags(final String[] tagNames) { 
    LOG.debug("Settings tags from tag array"); 
    this.setTags(Arrays.asList(tagNames)); 
} 

내가보고하고 그 결과를 로그이다 "단일 태그 문자열에서 태그 설정"메시지가 호출되었습니다. 그래서 c : set은 setTags (String []) 메소드가 아닌 setTags (String) 메소드를 호출합니다. 전달되는 "tagName"매개 변수는 "[Ljava.lang.String; @ 73f9e088"

의 줄을 따라 이동하는 이유는 무엇입니까? 내가 뭐 잘못 했니?

입력 해 주셔서 감사합니다.

+0

먼저 setter 메소드가 필요로 구현 될 수있다이 경우에, 나는 당신이 먼저 setter 메소드를 제거 할 수 있다고 생각합니다. 그들의 기능은 동일하지 않습니까? –

답변

1

"속성"의 개념은 getter 및 setter가 있고 getter의 반환 유형이 setter의 인수 유형과 동일한 경우입니다.

이 경우 "속성 검사기"는 아마도 String [String]이 아닌 property tagNames를 추론합니다. String 배열을 가진 setter가 있다는 사실은 중요하지 않습니다.

제안 : String을 허용하는 setTag와 String 배열을 허용하는 setTag를 소개합니다.

참고 속성이 필요하지 않습니다 속성 개념 : SetTag 함수가

public void setTag(String tag) { 
    setTags(new String[] { tag, }); 
} 
관련 문제