2010-02-05 1 views
2

라벨의 모델이 enum 값인 곳의 wicket 패널에 레이블을 추가하고 싶습니다. 해당 열거 형 값을 기반으로 페이지의 속성 파일에서 가져온 다른 메시지를 표시하고 싶습니다. 이 승인되지 않은 단순히 출력 것이다, 그러나wicket 속성 파일에서 문자열을 선택하려면 enum을 사용하십시오.

add(new Label("approval", new Model(ApprovalType.APPROVED))); 

: 나는 쉽게 자사의 모델로이 열거를 가지고 패널에 레이블을 추가 할 수 있습니다

public enum ApprovalType { UNAPPROVED, APPROVED, BLOCKED }; 

:

예를 들어, 여기에 열거입니다 APPROVED 또는 BLOCKED. 이 열거 형 값에 따라 선택된 지역화 된 메시지를 출력하고 싶습니다.

이 속성 파일이있는 경우 이러한 메시지를 출력하는 가장 좋은 방법은 무엇입니까?

add(new Label("approval", new ResourceModel(ApprovalType.APPROVED.name()); 

을 그러나 문제는 ResourceModel는 문자열 (자원 키)를 받아들이는 것입니다 :

UNAPPROVED=Your membership is currently pending approval 
APPROVED=Your membership has been approved 
BLOCKED=You have been blocked from membership 

나는이 같은 작업을 얻을 수 있습니다. 리소스 키의 값을 모델 (자동으로 CompoundPropertyModel)에서 가져오고 싶습니다. 즉, 나는이 일을하지 않으려 :

Member member = (Member) getDefaultModelObject(); 
add(new Label("approval", new ResourceModel(member.getApproval().name()))); 

차라리 같은 것을 할 거라고 :

add(new EnumLabel("approval"); // assuming I have a CompoundPropertyModel 

를 개찰구 함께 제공이 작업을 수행 구성 요소가 있습니까? 아니면 내 것을 쓸 필요가 있습니까?

add(new Label("approval", new StringResourceModel(
    "${}", 
    new PropertyModel<ApprovalType>(getDefaultModel(),"approval") 
))); 

하지만이 CompoundPropertyModel 사용의 단순함을 이용하지 않고 여전히 지나치게 자세한 것, 그리고 :

마지막으로,이 또한 작동 발견했다.

아이디어가 있으십니까?

답변

4

확실하지 않음이 'LL 일 경우,하지만 어쩌면 당신이 열거 형의 값을 취하고 ResourceModel 값을 반환 자신의 EnumModel 클래스를 작성하려고 할 수 있습니다 .. 위의 명확하지 않은 경우

그렇게 말 해주세요 충분히, 나는 정교하게 노력할 것이다.

+0

네, 아마도 올바른 방향 일 것입니다. 이 특정 문제를 해결하는 enum과 국제화를 사용하는 상세한 예제 (http://wicketbyexample.com/enums-internationalization-with-wicket/)를 발견했습니다. 그러나 해결책은 아주 장황하다, 나는 진짜로 더 가벼운 무언가를 찾고 있었다. EnumModel에 대해 자세히 설명해 주면 도움이 될 것입니다. – Tauren

+0

당신이 언급 한 기사에서 언급 한 EnumPropertyModel은 제가 시도했을 때와 매우 비슷합니다. CompoundPropertyModel을 사용하여 단순화하거나 만들 수 없다고 확신합니까? 나는 이것이 가능하다면 Wicket의 내부 동작에 너무 익숙하지 않다. – Tim