전직 동료가 30 분 전에 JavaBeans에 대한 토론을 시작했으며, JSF에서 원하는 방식으로 작동하지 않는 이유는 무엇입니까? 특별한 경우는 부울 속성에 관한 것입니다.JavaBeans 및 내부 검사 - 부울 및 색인 된 속성에서 엉망이 되었습니까?
. isUrl
이클립스라는 부울 속성이
private boolean isUrl;
public boolean isUrl() {..}
public boolean setUrl(boolean url) {..}
를 생성하지만이 JSF에서 작동하지 않습니다. 그는이 버그가있을 수 있습니다 구현을 public boolean getIsUrl()
추가하여 작동, 그래서 위의 코드에 대한 반성의 API :
BeanInfo info = Introspector.getBeanInfo(ClassTest.class);
for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
System.out.println(pd.getName() + ": " + pd.getReadMethod() +
" : " + pd.getWriteMethod());
}
를 사용하여, 바로 누구인지는,이 두 가지 방법을 인쇄 할 수 있도록했다 - 즉, 이클립스, JSF 권리 잘못된 것입니다. 그러나 그것은 the specification이 이중 "is"에 대해 언급하지 않았기 때문에 나에게 의심스러운 것으로 들렸다.
하지만 스펙을 살펴볼 때, 내가 사용하지 않은 것을 - 인덱스 된 속성이라고합니다. private String[] bar
과 public String getBar(int idx)
을 가질 수 있습니다. 따라서 :
. Introspector
으로 시도했지만 바에 대한 읽기 방법을 찾지 못했습니다. 위 코드의 결과는 bar: null : null
입니다. 그래서 생각했습니다. 이제 인트로 스펙터는 스펙을 따르지 않습니다. 아마 이전 사례에서 그것을 따르지 않았고 궁극적으로 JSF가 옳습니다. 실제로 인덱스 속성은 특정 속성에 대해 두 가지 읽기 메서드가 있도록 만들 수 있습니다. 그리고 이것은 내성 API 인 PropertyDescriptor
클래스로는 불가능합니다.
무엇이 우리를 이끌 었는지 - 사양에 맞지 않는 API가 손상되었을 수 있습니다. 이는 사양의 다른 구현으로 이어집니다 (JSF는 분명히 맞춤 설정을 사용합니다). 그 결과 더 많은 오해와 혼란이 야기됩니다.
JavaBeans 스펙에서 "디자인 패턴"메소드의 이름 지정 규칙을 호출합니다. 이것은 나에게 잘못된 것처럼 들린다.
그래서, 지금 질문에 :
- 는
- 분명히 자바 빈즈 스펙을 정정 반성의 API
- 필요한 새로운 자바 빈즈 사양입니다입니다, 적어도 그건 (부울의 동작을 명확히 범위에 주관적 임)
업데이트. JSF 사용이 bean.url
이 아닌 bean.isUrl
인 것으로 나타납니다. 접근 코드가 isUrl()
인 경우 완벽한 기능이 작동하지 않습니다.
P. JDK 1.6.0_20, JSF 1.2, MyFaces
아마도 C# 속성과 같은 것이 유용 할 것입니다. – Bozho
introspector 코드를 읽은 후 isXxxx가 작동해야합니다. 사용 된 필드 이름은 중요하지 않습니다. Java 6 업데이트 23을 사용해 보셨습니까? –