2010-11-12 3 views
1

В настоящее время я работаю над какой-то сложный веб переднего плана и его реализации с помощью:компонентов атрибуты не устанавливается после «засавить» по запросу AJAX

  • JSF 1.2
  • Facelets 1.1.15
  • RichFaces 3.3.3.Final

Я создал пользовательский компонент JSF, который позволяет проверять поля inputText, используя чистый JavaScript. Этот компонент имеет только один атрибут: type. Этот атрибут отвечает за алгоритм проверки, который будет применяться в момент, когда пользователь нажимает клавишу клавиатуры.

На этапе restoreView этап, когда создается первоначальный вид, этот атрибут задается JSF (фактически по Facelets). Это означает, что у меня есть класс компонента с установщиком и getter для атрибута 'type'. И setter 'type', вызываемый со значением, указанным в документе xhtml.

Компонентный объект воссоздается каждый раз на этапе restoreView, если я указываю их в атрибуте reRender. Но когда он воссоздается, мой обязательный тип атрибута не задан. Это просто создает новые объекты-объекты ... и все. Может быть, я что-то не понимаю, и это нормальное поведение, но как получить значения атрибутов в этом случае?

Код:

Простой тест-страница:

<?xml version="1.0" encoding="utf-8"?> 
<!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:u="http://java.sun.com/jsf/facelets" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:a="http://richfaces.org/a4j" 
     xmlns:r="http://richfaces.org/rich" 
     xmlns:v="http://nobodyhere.ru/jsf/validation"> 
    <head> 
     <title>Test Page</title> 
    </head> 
    <body> 
     <h:form id="testForm"> 
      <h:inputText id="textInput" value="test"> 
       <v:keyValidator type="time"/> 
      </h:inputText> 
      <a:commandButton value="Make AJAX request" reRender="testForm"/> 
     </h:form> 
    </body> 
</html> 

Компонент класса:

public class KeyValidator extends UIComponentBase 
{ 

    public KeyValidator() 
    { 
     System.out.println("new KeyValidator"); 
    } 

    public KeyValidatorType getValidatorType() 
    { 
     return type; 
    } 

    public String getType() 
    { 
     return getValidatorType().toString(); 
    } 

    public void setType(String type) 
    { 
     this.type = KeyValidatorType.valueOf(type.toUpperCase()); 
    } 

    @Override 
    public String getFamily() 
    { 
     return KeyValidator.class.getName(); 
    } 

    private KeyValidatorType type; 
} 

Когда я нажимаю "Сделать запрос AJAX" кнопка мой компонент воссоздан. Но атрибут «тип» не задан в компоненте.

Основная проблема начинается renderView фазы в компоненте визуализации при encodeBegin называется он пытается получить этот атрибут и, конечно, он получает null вместо правильного значения.

Таким образом, более точный вопрос:
Как получить значения атрибута компонента по запросу AJAX на этапе renderView?

Любая помощь будет принята с благодарностью.

ответ

0

Вы должны переопределить saveState и restoreState в компоненте для сохранения и восстановления необходимых атрибутов.

Удачи!

 Смежные вопросы

  • Нет связанных вопросов^_^