[英]Component attributes doesn't set after “reRender” on AJAX request
目前,我正在研究一些复杂的Web前端,并使用以下方法实现它:
我创建了一个自定义JSF组件,该组件可以使用纯JavaScript验证inputText字段。 该组件只有一个属性:type。 此属性负责验证算法,该算法将在用户按下键盘键时应用。
在创建初始视图的restoreView
阶段,此属性由JSF(实际上是Facelets)设置。 这意味着我有一个带有属性“类型”的设置器和获取器的组件类。 还有一个“类型”设置器,用xhtml文档中指定的值进行调用。
如果我在reRender属性中指定组件对象,则每次在restoreView阶段都会重新创建组件对象。 但是,当重新创建它时,我的必需属性类型未设置。 它只是创建新的组件对象……而已。 可能是我不了解某些内容,这是正常现象,但是在这种情况下如何获取属性值?
码:
简单测试页:
<?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
的,而不是正确的值。
因此,更精确的问题可能是:
如何在renderView
阶段获取AJAX请求上组件的属性值?
任何帮助将不胜感激。
您必须在组件中重写saveState
和restoreState
才能保存和恢复所需的属性。
祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.