最近在JSF的开发中使用了richfaces插件,使用了其便捷的标签插件:
其中richlist:Shuttle就是一个比较好用的标签,以下讲其标签的具体应用的测试实例:
首先在backbean中需要做以下配置:
<managed-bean>
<managed-bean-name>testShuffle</managed-bean-name>
<managed-bean-class>demo.controller.TestShuffle</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<converter>
<converter-id>Shuttleconverter</converter-id>
<converter-class>demo.bean.Converter</converter-class>
</converter>
TestShuffle是用来实现生成List的action:
public class TestShuffle {
private List<ShuffleItem> sourceList = new ArrayList<ShuffleItem>();
private List<ShuffleItem> targetList = new ArrayList<ShuffleItem>();
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
IUserDAO userdao = (UserDAO)context.getBean("userDao");
public List<ShuffleItem> getSourceList() {
return sourceList;
}
public void setSourceList(List<ShuffleItem> sourceList) {
this.sourceList = sourceList;
}
public List<ShuffleItem> getTargetList() {
return targetList;
}
public void setTargetList(List<ShuffleItem> targetList) {
this.targetList = targetList;
}
public String getRichList(){
List list = userdao.getNames();
for(int i = 0;i < list.size();i++){
HashMap paramMap = (HashMap)list.get(i);
ShuffleItem item = new ShuffleItem();
item.setName(paramMap.get("NAME").toString());
sourceList.add(item);
}
return "richList";//转向testRichfacesShuffle.xhtml
}
/*
*此方法用于测试TargetList取到的值
*/
public String getTargetValue(){
System.out.println("targetList.size()="+this.getTargetList().size());
System.out.println("the value in targetList is:");
for(int i=0;i < this.getTargetList().size();i++){
System.out.println(targetList.get(i).getName());
}
return null;
}
展示List的界面testRichfacesShuffle.xhtml:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:c="http://java.sun.com/jstl/core">
<!--引用统一的模板-->
<ui:composition template="pages/templates/Demotemplate.xhtml">
<!--header区域-->
<ui:define name="pageHeader">测试rich:listShuttle的取值</ui:define>
<!--body区域-->
<ui:define name="body">
<h:form>
<h:messages>
<f:facet name="errorMessage"></f:facet>
</h:messages>
<rich:listShuttle var="items"
sourceValue="#{testShuffle.sourceList}"
targetValue="#{testShuffle.targetList}"
targetRequired="true"
converter="Shuttleconverter"
sourceCaptionLabel="备选字段" targetCaptionLabel="已选字段"
listsHeight="200"
sourceListWidth="130"
targetListWidth="130" >
<rich:column width="50">
<h:outputText value="#{items.name}"></h:outputText>
</rich:column>
</rich:listShuttle>
<h:commandButton action="#{testShuffle.getTargetValue}" value="下一步" />
</h:form>
</ui:define>
</ui:composition>
</html>
注意:此处的 converter需要自己实现;以下是实现的代码:
首先:定义Converter.java类:
public class Converter implements javax.faces.convert.Converter{
public Object getAsObject(FacesContext context, UIComponent component,
String value) {
return new ShuffleItem(value);
}
public String getAsString(FacesContext context, UIComponent component,
Object value) {
ShuffleItem optionItem = (ShuffleItem) value;
return optionItem.getName();
}
}
其次是ShuffleItem .java:
public class ShuffleItem {
private String name;
public ShuffleItem(){
}
public ShuffleItem(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ShuffleItem other = (ShuffleItem) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
必须要实现转换器(converter)才能在列表间移动数据的时候分别取得源列表和目标列表的值!