RichFaces - ส่วนประกอบการเลือก

ในบทนี้เราจะเรียนรู้เกี่ยวกับส่วนประกอบการเลือกต่างๆที่จัดหาโดย RichFaces Technology

<rich: pickList>

ใช้แท็กนี้เราสามารถเลือกค่าหนึ่งจากรายการที่เติม นอกจากนี้ยังช่วยให้เราสามารถเพิ่มและลบองค์ประกอบรายการในรายการอื่นได้ ตัวอย่างต่อไปนี้สาธิตวิธีการทำงาน ดำเนินการต่อและสร้างไฟล์ xhtml หนึ่งไฟล์และตั้งชื่อเป็น "pickListExample.xhtml" และวางโค้ดต่อไปนี้

<?xml version = "1.0" encoding = "UTF-8"?>  
<!DOCTYPE html> 
<html xmlns  =  "http://www.w3.org/1999/xhtml"   
   xmlns:h = "http://java.sun.com/jsf/html"   
   xmlns:f = "http://java.sun.com/jsf/core"   
   xmlns:ui = "http://java.sun.com/jsf/facelets"   
   xmlns:a4j = "http://richfaces.org/a4j"   
   xmlns:rich = "http://richfaces.org/rich"> 
   
   <h:head> 
      <title>PickList Example</title> 
   </h:head> 
    
   <h:body> 
      <h:form>   
         <h:outputText value  =  "Pick List Example"/>
         <br/>
         <br/>      
         
         <rich:pickList value = "#{managedBean.subjectList}"   
            sourceCaption = "SubjectList"   
            targetCaption = "Selected Subject"   
            listWidth = "170px"   
            listHeight = "120px"       
            orderable = "true">   
            
            <f:selectItems value = "#{managedBean.subjectList}" 
               itemValue = "#{subject}" itemLabel = "#{subject.subjectName}"/>   
         </rich:pickList>  
      </h:form>
   </h:body> 
   
</html>

เราจำเป็นต้องแก้ไขไฟล์ ManagedBean.java ของเราเพื่อเติมข้อมูลคอมโพเนนต์รายการในไฟล์ xhtml ต่อไปนี้เป็นภาพรวมของไฟล์ Java ที่แก้ไขของเรา

import java.util.Arrays; 
import java.util.List; 
import javax.faces.bean.ManagedBean;   
import javax.faces.bean.RequestScoped;   

@ManagedBean   
@RequestScoped   

public class managedBean {   
   String message;  
   String job; 
   private List<String> SubjectList = Arrays.asList(
      "Richface","AJAX","JAVA","JSF","DOTNET","python"); 
   
   public String getMessage() {   
      return message;   
   }   
   public void setMessage(String message) {   
      System.out.println("setMessage method is getting called with--"+message); 
      this.message = message;   
   } 
   public String getJob() { 
      return job; 
   } 
   public void setJob(String job) { 
      System.out.println("setJob method is getting called with--"+job); 
      this.job = job; 
   } 
   public List<String> getSubjectList() { 
      return SubjectList;
   }  
   public void setSubjectList(List<String> SubjectList) { 
      this.SubjectList = SubjectList; 
   } 
}

โค้ดด้านบนจะให้ผลลัพธ์ต่อไปนี้ในเบราว์เซอร์ แอตทริบิวต์ "value" ของแท็ก pickList ไม่ใช่อะไรนอกจาก“ getSubjectList ()” ของคลาส bean “ itemValue” เป็นคำย่อของคลาสอ็อบเจ็กต์และ“ itemLabel” ที่เกี่ยวข้องคือชื่อค่าอินสแตนซ์ ในตัวอย่างนี้แท็ก pickList ของเราจะสร้างรายการสองรายการแยกกันโดยอัตโนมัติชื่อ "sourceCaption" และ "targetCaption" แอตทริบิวต์ที่สั่งซื้อได้ถูกใช้เพื่อรักษาลำดับการเลือกในรายการเป้าหมาย

<rich: ordersList>

แท็กนี้ใช้เพื่อแสดงรายการโดยรวม <orderingList> จะจัดเตรียมปุ่มบางปุ่มเช่นฟังก์ชันเพื่อเผยแพร่ผ่านรายการโดยอัตโนมัติและช่วยสั่งซื้อรายการที่เลือก ในตัวอย่างต่อไปนี้เราจะสร้างรายการสั่งซื้อหนึ่งรายการโดยใช้รหัสต่อไปนี้สำหรับ "OrderingListExample.xhtml"

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE html> 
<html xmlns = "http://www.w3.org/1999/xhtml"   
   xmlns:h = "http://java.sun.com/jsf/html"   
   xmlns:f = "http://java.sun.com/jsf/core"   
   xmlns:ui = "http://java.sun.com/jsf/facelets"   
   xmlns:a4j = "http://richfaces.org/a4j"   
   xmlns:rich = "http://richfaces.org/rich"> 
   
   <h:head> 
      <title>OrderingList Example</title> 
   </h:head> 
    
   <h:body> 
      <h:form>   
         <h:outputText value = "ordering List Example"/><br/><br/>
         <rich:orderingList value = "#{managedBean.subjectList}"  
            itemValue = "#{subject}" 
            itemLabel = "#{subject.subjectName}" >   
         </rich:orderingList>  
      </h:form>    
   </h:body> 
   
</html>

เราไม่จำเป็นต้องเปลี่ยนคลาส bean ของเราเนื่องจากเรากำลังเติมข้อมูลในรายการเดียวกันอีกครั้งโดยใช้แท็กที่ต่างกันสำหรับการแทนค่า เช่นเดียวกับตัวอย่างก่อนหน้านี้แม้ในที่นี้แอตทริบิวต์ค่าจะมีรายการทั้งหมดที่มาจาก“ getSubjectList ()” “ itemValue” และ“ itemLabel” เก็บค่าของคลาสอ็อบเจ็กต์และตัวแปรอินสแตนซ์ที่เกี่ยวข้องตามลำดับ

โค้ดด้านบนจะสร้างผลลัพธ์ต่อไปนี้ในเบราว์เซอร์

<rich: ListShuttle>

แท็ก ListShuttle มีอยู่ใน RichFaces 3 ช่วยเผยแพร่ผ่านรายการหนึ่งและใส่ค่าเดียวกันลงในอีกรายการหนึ่ง ใน RichFaces 4 แท็กนี้ถูกระงับเนื่องจากฟังก์ชันเดียวกันนี้สามารถทำได้โดยแท็กใหม่ชื่อ <rich: pickList> ตามที่อธิบายไว้ข้างต้น หากคุณใช้ RichFaces 3.0 คุณสามารถใช้แท็กนี้ในลักษณะต่อไปนี้

<rich:listShuttle sourceValue = "#{toolBar.freeItems}" 
   targetValue = "#{toolBar.items}" var = "items" listsHeight = "150" 
   sourceListWidth = "130" targetListWidth = "130" 
   sourceCaptionLabel = "Available Items" 
   targetCaptionLabel = "Currently Active Items" 
   converter = "listShuttleconverter">  
   
   <rich:column width = "18">  
      <h:graphicImage value = "#{items.iconURI}"></h:graphicImage> 
   </rich:column> 
   
   <rich:column> 
      <h:outputText value = "#{items.label}"></h:outputText> 
   </rich:column> 
   
   <a4j:support event = "onlistchanged" reRender = "toolBar" /> 
   <a4j:support event = "onorderchanged" reRender = "toolBar" /> 
</rich:listShuttle>

สะดวกมากในการใช้ pickList แทนที่จะใช้แท็กนี้เนื่องจากฟังก์ชันเดียวกันนี้สามารถทำได้โดยใช้ pickList โดยเขียนโค้ดเพียงสองบรรทัด