struts2 매거 변환기 (helloworld)

1. 열거 클래스:
public enum AreaType implements IEnumConverter {
	
	FZ(" ", 591), 
	XM(" ", 592);
	
	private String text;
	private Integer value;

	private AreaType(String text, Integer value) {
		this.text = text;
		this.value = value;
	}

	@Override
	public String getName() {
		return this.name();
	}

	@Override
	public Integer getOrdinal() {
		return this.ordinal();
	}

	@Override
	public String getText() {
		return text;
	}

	@Override
	public Integer getValue() {
		return value;
	}

	/**
	 *  
	 * 
	 * @param ordinal
	 * @return
	 */
	public static AreaType getByOrdinal(Integer ordinal) {
		if (null != ordinal) {
			for (AreaType t : AreaType.values()) {
				if (t.ordinal() == ordinal) {
					return t;
				}
			}
		}
		return null;
	}
}

2. 인터페이스, 매거진이 이 인터페이스를 실현하고 모든 매거진이 전환되는 효과에 도달
/**
 *  , ,struts2 
 * 
 * @author chenl   Dec 1, 2011
 */
public interface IEnumConverter {
	/**
	 *  
	 */
	Integer getOrdinal();

	/**
	 *  , 
	 */
	String getName();

	String getText();
	
	Integer getValue();
}

3. 매거진 변환기, StrutsTypeConverter 클래스 상속
/**
 *  
 * 
 * @author chenl   Dec 1, 2011
 */
public class EnumCommonConverter extends StrutsTypeConverter {

	@Override
	public Object convertFromString(Map context, String[] values, Class clazz) {
		System.out.println(" ......");
		String str = values[0];
		if (str != null && !"".equals(str)) {
			try {
				IEnumConverter[] enums = (IEnumConverter[]) clazz.getMethod("values").invoke(null);//  values 
				if (null != enums && enums.length > 0) {
					for (IEnumConverter e : enums) {
						if (str.equals(e.getValue().toString())) {
							return e;
						}
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	@Override
	public String convertToString(Map context, Object o) {
		System.out.println(" convertToString ......");
		return null != o && o instanceof IEnumConverter ? ((IEnumConverter) o).getText() : "";
	}

	public static void main(String[] args) {
		Object obj = new EnumCommonConverter().convertFromString(null, new String[] { "1" }, AreaType.class);
		System.out.println(obj);

	}
}

4. 마지막으로 프로젝트의 src 디렉터리에 xwork-conversion을 추가합니다.properties 파일,
내용:com.jungle.enums.IEnumConverter = com.jungle.enums.EnumCommonConverter
요청 페이지:
<!--    -->
			<%
				AreaType[] areas = AreaType.values();
				request.setAttribute("areas",areas);
			%>
			<s:form action="enum!execute.action" namespace="/">
				<s:select name="area" list="#request.areas" id="area"
					listKey="value" listValue="text">
				</s:select>
				<s:submit></s:submit>
			</s:form>

Action:
import com.jungle.enums.AreaType;
import com.opensymphony.xwork2.ActionSupport;

@Results(value = { @Result(name = "success", location = "/enum.jsp") })
public class EnumAction extends ActionSupport {
	private AreaType area;
	@Override
	public String execute() throws Exception {
		System.out.println("EnumAction.execute():" + area);
		return SUCCESS;
	}
	public AreaType getArea() {
		return area;
	}
	public void setArea(AreaType area) {
		this.area = area;
	}
}

결과 페이지:
<s:property value="area.name"/>
<s:property value="area.text"/>
<s:property value="area.value"/>

변환기가 완벽하지 않고 개선이 필요하다. 이 글은 벽돌을 던져 옥을 끌어올리는 작용을 떠올릴 뿐이다.
이 액션은struts2-convention-plugin에 사용할 설정이 없는 플러그인을 사용합니다.jar는 내 다른 글을 볼 수 있습니다.http://blog.csdn.net/cl61917380/article/details/7017745
이 편의 중점은 변환기다.너도 일반적인 방법으로 방문할 수 있다.

좋은 웹페이지 즐겨찾기