До сих пор мы узнали много нового о различных компонентах AJAX RichFaces, а также о новой функциональности под названием «Skin». В этой главе мы изучим различные «Rich» компоненты, которые предлагает RichFaces для разработки современного веб-приложения. Ниже приведены различные компоненты ввода, предоставляемые «RichFaces».
<Богатые: inplaceInput>
Rich inplaceInput дает возможность создать редактируемое текстовое поле вместо обычного текстового поля ввода. В следующем примере мы создадим редактируемое текстовое поле, используя этот компонент. Создайте файл xhtml и назовите его «richinplaceInput.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>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>
Сохраните этот файл и запустите его. Ниже будет вывод в браузере.
Идите вперед и введите что-нибудь по вашему выбору в этом текстовом поле и нажмите Enter. Этот тег также предоставляет встроенную возможность редактирования. Следующее будет выведено после редактирования.
<rich: inplaceSelect>
Это еще одна разметка ввода, предоставляемая RichFaces, где пользователь может выбрать значение ввода из раскрывающегося списка, которое также является встроенным и редактируемым по своей природе. Нам нужно заполнить выпадающий список из внутреннего класса бинов. Пожалуйста, создайте файл «xhtml» и назовите его «richinplaceSelectExample.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>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>
В приведенном выше примере мы заполним раскрывающиеся опции из серверной части. Вот класс бинов с именем ”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; } }
Все имена субъектов, которые мы проходим через список, будут отображаться в выпадающем меню. Ниже будет вывод после запуска этого приложения.
<Богатые: SuggestionBox>
<rich: SuggestionBox> используется для предоставления предложений пользователю в зависимости от ввода, введенного в поле ввода. Этот тег создает внутреннее событие JS и вызывает требуемый класс istener для предоставления подсказки из серверной части. К сожалению, оба элемента SuggestionBox и ComboBox объединены в отдельный тег «<rich: autocomplete>» в RichFaces 4, однако, если вы используете RichFaces 3, вы можете использовать этот тег, как показано ниже.
<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>
Где «capitalsBean» будет классом Java с другими параметрами, а класс слушателя с именем «autocomplete» установит значение переменной экземпляра «capital» во время выполнения и предоставит требуемые выходные данные. Настоятельно рекомендуется использовать RichFaces 4 «автозаполнение» вместо использования этого тега, так как дизайнеры больше не поддерживают этот тег.
<Богатые: ComboBox>
<rich: comboBox> работает точно так же, как и <rich: SuggestionBox>, однако вместо вызова класса слушателя этот тег предварительно отображает некоторые предложения в клиентском браузере, который взаимодействует друг с другом и обеспечивает желаемый результат. Как и <rich: sugegstionBox>, эта функция также не поддерживается в новой версии с другим тегом, называемым «<rich: autocomplete>», описанным в следующем коде.
Создайте отдельный файл и назовите его «richAutoComplete.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></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>
В приведенном выше примере мы заполняем список тем с помощью функции автозаполнения RichFaces. Создайте другой класс Java и назовите его «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; } }
Приведенный выше файл действует как класс bean-компонента, а SubjectList () — это метод, который фактически отображает ответ в браузере. В теге <SuggestionBox>, <ComboBox> нам нужно реализовать класс слушателя, однако в случае тега <autocomplete> это создание класса слушателя было автоматизировано, что проще для разработчика. Приведенный выше фрагмент кода выдаст следующий вывод в браузере.
<Богатые: inputNumberSlider>
Это очень простой тег, который помогает разработчику создать числовую ползунок в зависимости от числового интервала. Создайте файл «inputNumberSlider.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></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>
В приведенном выше примере атрибуты в значительной степени описательны. Приведенный выше фрагмент кода выдаст следующий вывод в браузере.
<Богатые: календарь>
Как следует из названия, этот тег поможет создать календарь в браузере. Создайте отдельный файл и назовите его «richCalendar.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></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>
Нам нужно создать еще один класс с именем «calendarBean.java», чтобы хранить все значения календаря, такие как «Дата», «Локаль», «Шаблон даты» и т. Д. Ниже приведен код для «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; } }
Приведенный выше фрагмент кода сгенерирует следующий вывод в браузере.
<Богатые: InputNumberSpinner>
Этот тег помогает разработчику создать счетчик для заполнения экземпляра компонента. Ниже приведен пример, который поможет вам понять тег Spinner в деталях. Пожалуйста, создайте отдельный файл xhtml и назовите его «InputNumberSpinner.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>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>
Приведенный выше фрагмент кода выдаст следующий вывод в браузере.