В настоящее время я работаю над какой-то сложный веб переднего плана и его реализации с помощью:компонентов атрибуты не устанавливается после «засавить» по запросу 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
?
Любая помощь будет принята с благодарностью.