RichFaces - Eingabekomponenten

Bis jetzt haben wir viel über verschiedene AJAX-Komponenten von RichFaces gelernt, zusammen mit einer neuen Funktionalität namens "Skin". In diesem Kapitel lernen wir verschiedene „Rich“ -Komponenten kennen, die RichFaces anbietet, um eine moderne Webanwendung zu entwickeln. Im Folgenden sind die verschiedenen Eingabekomponenten aufgeführt, die von „RichFaces“ bereitgestellt werden.

<rich: inplaceInput>

Rich inplaceInput bietet die Möglichkeit, ein bearbeitbares Textfeld anstelle eines normalen Eingabetextfelds zu erstellen. Im folgenden Beispiel erstellen wir mit dieser Komponente ein bearbeitbares Textfeld. Erstellen Sie eine xhtml-Datei und nennen Sie sie "richinplaceInput.xhtml". Schreiben Sie den folgenden Code in diese Datei.

<?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>TODO supply a title</title> 
   </h:head> 
    
   <h:body> 
      <f:view></f:view>   
      <h:form>   
         <rich:inplaceInput  value = "#{managedBean.message}"   
            defaultLabel = "Enter Your Name"/> 
      </h:form>  
   </h:body>
   
</html>

Speichern Sie diese Datei und führen Sie sie aus. Es folgt die Ausgabe im Browser.

Geben Sie etwas in das Textfeld ein und drücken Sie die Eingabetaste. Dieses Tag bietet auch eine Inline-Bearbeitungsoption. Folgendes wird nach der Bearbeitung ausgegeben.

<rich: inplaceSelect>

Dies ist ein weiteres Eingabe-Markup von RichFaces, bei dem der Benutzer einen Eingabewert aus der Dropdown-Liste auswählen kann, der ebenfalls inline und bearbeitbar ist. Wir müssen das Dropdown-Menü aus der internen Bean-Klasse füllen. Bitte erstellen Sie eine "xhtml" -Datei und nennen Sie sie "richinplaceSelectExample.xhtml". Fügen Sie den folgenden Code in diese Datei ein.

<?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>TODO supply a title</title>
   </h:head> 
    
   <h:body> 
      <h:form> 
         <rich:inplaceSelect value = "#{subject.subjectName}" defaultLabel = "Click to Select Country">
            <f:selectItems value = "#{subject.SubJectList()}"></f:selectItems>   
         </rich:inplaceSelect> 
      </h:form>     
   </h:body>
   
</html>

Im obigen Beispiel werden die Dropdown-Optionen aus dem Backend ausgefüllt. Hier ist die Bean-Klasse mit dem Namen "subject.java".

import java.util.ArrayList; 
import java.util.List; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ManagedProperty; 
import javax.faces.bean.RequestScoped;   

@ManagedBean 
@RequestScoped 

public class Subject { 
   String SubjectName;  
   public Subject() { 
   }  
   public Subject(String SubjectName) { 
      this.SubjectName = SubjectName; 
   } 
   public List<String> SubJectList() {  
      //this list to be rendered
      ArrayList<String> list = new ArrayList<>();   
      
      list.add("JAVA");   
      list.add("DOTNET");   
      list.add("COBOL");   
      list.add("AJAX");   
      list.add("JAVA SCRIPT");   
      return list;   
   }    
   public String getSubjectName() { 
      return SubjectName; 
   } 
   public void setSubjectName(String SubjectName) { 
      this.SubjectName = SubjectName; 
   } 
}

Alle Betreffnamen, die wir durch die Liste führen, werden im Dropdown-Menü angezeigt. Nach dem Ausführen dieser Anwendung wird die Ausgabe angezeigt.

<rich: SuggestionBox>

<rich: SuggestionBox> wird verwendet, um dem Benutzer abhängig von der Eingabe im Eingabetextfeld Vorschläge zu unterbreiten. Dieses Tag erstellt intern ein JS-Ereignis und ruft die erforderliche istener-Klasse auf, um den Vorschlag vom Backend bereitzustellen. Leider werden diese SuggestBox und ComboBox in RichFaces 4 zu einem separaten Tag mit dem Namen "<rich: autocomplete>" zusammengefasst. Wenn Sie jedoch RichFaces 3 verwenden, können Sie dieses Tag wie unten gezeigt verwenden.

<h:inputText id = "city" value = "#{capitalsBean.capital}" /> 
<rich:suggestionbox for = "city" var = "result" 
   suggestionAction = "#{capitalsBean.autocomplete}"> 
   
   <h:column> 
      <h:outputText value = "#{result.name}" /> 
   </h:column> 
</rich:suggestionbox>

Wobei "capitalsBean" eine Java-Klasse mit unterschiedlichen Parametern ist und die Listener-Klasse "autocomplete" den Wert der Instanzvariablen "capital" zur Laufzeit festlegt und die erforderliche Ausgabe der Wahl bereitstellt. Es wird dringend empfohlen, RichFaces 4 "Autocomplete" anstelle dieses Tags zu verwenden, da Designer dieses Tag nicht mehr unterstützen.

<rich: comboBox>

<rich: comboBox> funktioniert genau wie <rich: suggestBox>. Anstatt jedoch die Listener-Klasse aufzurufen, rendert dieses Tag einige Vorschläge vorab in den Client-Browser, der miteinander interagiert und die gewünschte Ausgabe liefert. Wie <rich: sugegstionBox> wird auch diese Funktion in der neuen Version mit einem anderen Tag namens "<rich: autocomplete>", das im folgenden Code beschrieben wird, abgeschrieben.

Erstellen Sie eine separate Datei und nennen Sie sie "richAutoComplete.xhtml". Fügen Sie den folgenden Code in diese Datei ein.

<?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></h:head> 
   
   <h:body> 
      <h:form id = "form"> 
         <h:form id = "form"> 
            <rich:autocomplete mode = "cachedAJAX" minChars = "2" 
            autocompleteMethod = "#{autoComplete.SubJectList()}" /> 
         </h:form> 
      </h:form> 
   </h:body>
   
</html>

Im obigen Beispiel füllen wir die Themenliste mit der Funktion zur automatischen Vervollständigung von RichFaces. Erstellen Sie eine weitere Java-Klasse und nennen Sie sie "autoComplete.java".

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

@ManagedBean 
@RequestScoped 

public class autoComplete { 
   public autoComplete(){} 
   private List<String> autoCompleteList=new ArrayList<>(); 
   
   public List<String> SubJectList() {   
      //ArrayList<String> list = new ArrayList<>();   
      autoCompleteList.add("JAVA");   
      autoCompleteList.add("DOTNET");   
      autoCompleteList.add("COBOL");   
      autoCompleteList.add("AJAX");   
      autoCompleteList.add("JAVA SCRIPT");   
      return autoCompleteList;   
   }   
   public List<String> getAutoCompleteList() {
      return autoCompleteList; 
   }  
   public void setAutoCompleteList(List<String> autoCompleteList) { 
      this.autoCompleteList = autoCompleteList; 
   } 
}

Die obige Datei fungiert als Bean-Klasse und SubjectList () ist die Methode, mit der die Antwort tatsächlich an den Browser gerendert wird. Im Tag <SuggestionBox>, <ComboBox> müssen wir die Listener-Klasse implementieren. Im Fall des Tags <autocomplete> wurde diese Erstellung der Listener-Klasse jedoch automatisiert, was für den Entwickler einfacher ist. Der obige Code liefert die folgende Ausgabe im Browser.

<rich: inputNumberSlider>

Dies ist ein sehr einfaches Tag, mit dem der Entwickler abhängig vom numerischen Intervall einen numerischen Schieberegler erstellen kann. Erstellen Sie die Datei "inputNumberSlider.xhtml" und platzieren Sie den folgenden Code darin.

<?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></h:head> 
   
   <h:body> 
      <h:form>   
         <h:outputText value = "Slide Bar example"></h:outputText>   
         <rich:inputNumberSlider    
            minValue = "1"   
            maxValue = "10"   
            showArrows = "false"   
            showTooltip = "false"   
            step = "1">   
         </rich:inputNumberSlider>   
      </h:form>  
   </h:body>
   
</html>

Im obigen Beispiel sind die Attribute ziemlich beschreibend. Der obige Code liefert die folgende Ausgabe im Browser.

<rich: Kalender>

Wie der Name schon sagt, hilft dieses Tag beim Erstellen eines Kalenders im Browser. Erstellen Sie eine separate Datei und nennen Sie sie "richCalendar.xhtml". Fügen Sie den folgenden Code ein.

<?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></h:head> 
   
   <h:body> 
      <h:form>   
         <h1>Calendar</h1>   
         <rich:calendar value = "#{calendarBean.selectedDate}"   
            locale = "#{calendarBean.locale}"   
            popup = "#{calendarBean.popup}"   
            datePattern = "#{calendar.pattern}"   
            style = "width:200px">
         </rich:calendar>   
      </h:form> 
   </h:body>
   
</html>

Wir müssen eine weitere Klasse namens "calendarBean.java" erstellen, um alle Kalenderwerte wie Datum, Gebietsschema, Datumsmuster usw. zu speichern. Nachfolgend finden Sie den Code für "calendarBean.java".

import java.text.DateFormat; 
import java.util.Date; 
import java.util.Locale; 
  
import javax.faces.event.ValueChangeEvent; 
  
public class CalendarBean { 
   private static final String[] WEEK_DAY_LABELS = new String[] { 
      "Sun *", "Mon +", "Tue +", "Wed +", "Thu +", "Fri +", "Sat *" }; 
   
   private Locale locale; 
   private boolean popup; 
   private boolean readonly; 
   private boolean showInput; 
   private boolean enableManualInput;     
   private String pattern; 
   private Date currentDate; 
   private Date selectedDate; 
   private String jointPoint; 
   private String direction; 
   private String boundary; 
   private boolean useCustomDayLabels; 
  
   public Locale getLocale() { 
      return locale; 
   }
   public void setLocale(Locale locale) { 
      this.locale = locale; 
   } 
   public boolean isPopup() { 
      return popup; 
   } 
   public void setPopup(boolean popup) { 
      this.popup = popup; 
   } 
   public String getPattern() { 
      return pattern; 
   } 
   public void setPattern(String pattern) { 
      this.pattern = pattern; 
   } 
   public CalendarBean() { 
      locale = Locale.US; 
      popup = true; 
      pattern = "MMM d, yyyy"; 
      jointPoint = "bottomleft"; 
      direction = "bottomright"; 
      readonly = true; 
      enableManualInput = false; 
      showInput = true; 
      boundary = "inactive"; 
   } 
   public boolean isShowInput() { 
      return showInput;
   } 
   public void setShowInput(boolean showInput) { 
      this.showInput = showInput; 
   } 
   public boolean isEnableManualInput() { 
      return enableManualInput; 
   } 
   public void setEnableManualInput(boolean enableManualInput) { 
      this.enableManualInput = enableManualInput; 
   } 
   public boolean isReadonly() { 
      return readonly; 
   } 
   public void setReadonly(boolean readonly) { 
      this.readonly = readonly; 
   } 
   public void selectLocale(ValueChangeEvent event) { 
      String tLocale = (String) event.getNewValue(); 
      if (tLocale != null) { 
         String lang = tLocale.substring(0, 2); 
         String country = tLocale.substring(3); 
         locale = new Locale(lang, country, ""); 
      } 
   } 
   public boolean isUseCustomDayLabels() { 
      return useCustomDayLabels; 
   } 
   public void setUseCustomDayLabels(boolean useCustomDayLabels) { 
      this.useCustomDayLabels = useCustomDayLabels; 
   } 
   public Object getWeekDayLabelsShort() { 
      if (isUseCustomDayLabels()) { 
         return WEEK_DAY_LABELS; 
      } else { 
         return null; 
      } 
   } 
   public String getCurrentDateAsText() { 
      Date currentDate = getCurrentDate(); 
      if (currentDate ! =  null) { 
         return DateFormat.getDateInstance(DateFormat.FULL).format(currentDate); 
      } 
      return null; 
   } 
   public Date getCurrentDate() { 
      return currentDate; 
   } 
   public void setCurrentDate(Date currentDate) { 
      this.currentDate = currentDate; 
   } 
   public Date getSelectedDate() { 
      return selectedDate; 
   } 
   public void setSelectedDate(Date selectedDate) { 
      this.selectedDate = selectedDate; 
   } 
   public String getJointPoint() { 
      return jointPoint; 
   } 
   public void setJointPoint(String jointPoint) { 
      this.jointPoint = jointPoint; 
   } 
   public void selectJointPoint(ValueChangeEvent event) { 
      jointPoint = (String) event.getNewValue(); 
   } 
   public String getDirection() { 
      return direction; 
   } 
   public void setDirection(String direction) { 
      this.direction = direction; 
   } 
   public void selectDirection(ValueChangeEvent event) { 
      direction = (String) event.getNewValue(); 
   } 
   public String getBoundary() { 
      return boundary; 
   } 
   public void setBoundary(String boundary) { 
      this.boundary = boundary; 
   } 
}

Der obige Code generiert die folgende Ausgabe im Browser.

<rich: InputNumberSpinner>

Dieses Tag hilft dem Entwickler, einen Spinner zu erstellen, um eine Instanz einer Bean zu füllen. Das folgende Beispiel hilft Ihnen dabei, das Spinner-Tag im Detail zu verstehen. Bitte erstellen Sie eine separate xhtml-Datei mit dem Namen "InputNumberSpinner.xhtml" und fügen Sie den folgenden Code ein.

<?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>Number Slider Example</title> 
   </h:head>
   
   <h:body> 
      <h:form>   
         <h:outputText value = "Select a Date"></h:outputText>
         <br/>
         <br/>   
         
         <rich:inputNumberSpinner   
            minValue = "1"   
            maxValue = "31"   
            step = "1">   
         </rich:inputNumberSpinner>  
      </h:form>   
   </h:body>
   
</html>

Der obige Code liefert die folgende Ausgabe im Browser.