2014-04-21 1 views
2

SmartGWT Showcase 및 포럼에 대한 일부 조사를 시도했지만 대답을 찾을 수 없습니다. 나는 또한 더 광범위한 Google 검색을 시도했지만 대답을 찾을 수도 없었다. 그래서, 여기서 도움을 얻을 수 있기를 바랍니다.smartgwt DataSourceEnumField 예제

나는 나의 "공유"폴더에 열거 자바 클래스가 : 난 그냥 DataSourceEnumField를 만들고 된 valueMap을 설정할 수 있습니다 알고

public enum PointInTimeType { 

FIRST("F", "First"), 
START("S", "Start"), 
END("E", "End"), 
LAST("L", "Last"), 
MIN("MI", "Minimum"), 
MAX("MX", "Maximum"); 

private String code; 
private String name; 

private PointInTimeType(String code, String name) { 
    this.code = code; 
    this.name = name; 

} 

public String getCode() { 
    return code; 
} 

public String getName() { 
    return name; 
} 

을하지만,이 값은 하드 코딩하고 열거 자바 클래스 수 앞으로 더 많은 열거 형을 추가하십시오. 열거 형이 업데이트 될 때마다 ValueMap을 업데이트하지 않아도됩니다.

그래서 드롭 다운 (SelectItem)으로 양식을 가지므로, optionDataSource를 enumfield의 값 목록으로 설정하고 싶습니다.

그래서이 열거 형 데이터를 가져 오거나이 열거 형 Java 클래스에 연결되도록 데이터 소스를 설정하는 방법을 묻습니다.

이 방법을 사용하면 양식을 만들어 다른 데이터 소스에 묶을 때 SlectItem을 만들고 다른 드롭 다운 방식으로 설정할 수 있습니다. 나는 단지 열거 형이 아닌 객체 목록에 연결된 DataSources를 사용하는 데 익숙하다.

답변

1

나는 똑같은 문제에 직면했고, 이름 클래스의 "열거 형"이 참으로 오도 된 것임을 알았다.

어쨌든 열거 형을 사용할 수 있더라도 사용자 지정 특성이 있으므로 사용자에게는 쓸모가 없습니다.

그러나이 문제를 해결하기 위해 enum 값을 반복하고지도를 채울 수 있습니다. 당신은 그것을 구현, 그리고

public interface CodeNameEnum { 
    String getCode(); 
    String getName(); 
} 

열거합니다 :

public enum PointInTimeType implements CodeNameEnum { 

    FIRST("F", "First"), 
    START("S", "Start"), 
    END("E", "End"), 
    LAST("L", "Last"), 
    MIN("MI", "Minimum"), 
    MAX("MX", "Maximum"); 

    private String code; 
    private String name; 

    private PointInTimeType(String code, String name) { 
     this.code = code; 
     this.name = name; 
    } 
    public String getCode() { 
     return code; 
    } 
    public String getName() { 
     return name; 
    } 

} 

을 마지막으로,이 방법을 사용 :

public class EnumToMap { 

    public static Map<String, String> getMapFromEnum(CodeNameEnum[] codeNameEnumArray) { 
     Map <String, String> map = new HashMap<String, String>(); 
     for (CodeNameEnum codeNameEnum : codeNameEnumArray) { 
      map.put(codeNameEnum.getCode(), codeNameEnum.getName()); 
     } 
     return map; 
    } 

    public static void main(String[] args) { 
     Map <String, String> map = getMapFromEnum(PointInTimeType.values()); 
     System.out.println(map); 
    } 

} 

를 그래서 당신은 수있는 한 가지 일반적인 방법은 다음과 같이 인터페이스를 만드는 코드 및 이름을 포함하는 모든 열거 형에 대해이 메서드를 사용하십시오. 그것은 고립 된 경우라면

그렇지 않으면, 그냥 이렇게 :

Map <String, String> map = new HashMap<String, String>(); 
for (PointInTimeType item : PointInTimeType.values()) { 
    map.put(item.getCode(), item.getName()); 
} 
return map;