JSF: как изменить значение свойства класса из JavaScript.
Сделать это очень просто, если использовать известную библиотеку компонентов для JSF - RichFaces. Для использования RichFaces подключите все необходимые библиотеки к проекту веб-приложения, вот список библиотек с зависимостями, которые нужны для подключения RichFaces (в этом примере я использовал в качестве сервера приложений Jboss 7.1).
common-annotations.jar
commons-beanutils.jar
commons-collections.jar
commons-digester-with-deps.jar
commons-logging-.jar cssparser.jar
guava.jar httpclient.jar httpcore.jar
httpmime.jar json_simple.jar jstl.jar
richfaces-components-api.jar
richfaces-components-ui.jar
richfaces-core-api.jar
richfaces-core-impl.jar
sac.jar standard.jar
Теперь предположим, что есть вот такой класс (managed bean):
package test; import java.io.Serializable; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; @ManagedBean(name = "formBean") @SessionScoped public class FormBean implements Serializable { private static final long serialVersionUID = 1L; private String value; public void setValue(String value){ this.value = value; } public String getValue(){ return value; } }
И допустим, что нужно установить значение поля value из javascript. Для этого можно использовать элемент <a4j:jsFunction>. Выглядит его использование подобным образом:
<a4j:jsFunction name="setValue" render="ajaxArea"> <a4j:param name="value" assignTo="#{formBean.value}" /> </a4j:jsFunction>
Этот тег создает javascript функцию с именем name, параметром value, который привязан к свойству класса - #{formBean.value}. И соответственно, когда эта js функция выполняется, перерисовывается область ajaxArea. Вот пример страницы, при загрузке которой вызывается js функция, которая устанавливает свойство value, после чего перерисовывается соответствующее текстовое поле.
<!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> <script type="text/javascript"> window.onload = function() { setValue('hello'); }; </script> <a4j:jsFunction name="setValue" render="ajaxArea"> <a4j:param name="value" assignTo="#{formBean.value}" /> </a4j:jsFunction> </h:head> <h:body> <h:form> <f:view> <a4j:outputPanel id="ajaxArea"> <h:outputText value="#{formBean.value}"/> </a4j:outputPanel> </f:view> </h:form> </h:body> </html>
Теги: programming java richfaces javaEE
comments powered by Disqus