天天看点

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

 }

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