richlist:Shuttle的应用

最近在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)才能在列表间移动数据的时候分别取得源列表和目标列表的值!
 

 

 

你可能感兴趣的:(bean,UI,XHTML,Richfaces,JSF)