我正在学习如何在JSF中使用Ajax,我创建了一个页面,它实际上什么也不做,有一个输入文本框,用于填写一个数字,提交到服务器后,调用该元素的setter方法并显示getter方法的值。
这是简单Bean的代码:
@ManagedBean(name="helper",eager=true)
public class HealthPlanHelper {
String random = "1";
public void setRandomize(String s){
random = s;
System.out.println("Calling setter");
}
public String getRandomize(){
return random;
}
}
还有jsf页面:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head></h:head>
<h:body>
<h:form>
<h:commandButton action="nothing">
<f:ajax render="num"/>
</h:commandButton>
<h:inputText value="#{helper.randomize}" id="num"/>
</h:form>
</h:body>
</html>
如您所见,这是一个请求范围的bean,每当我点击按钮时,服务器都会显示它创建了一个bean实例,但setter方法从未被调用,因此getter方法始终返回字符串值"1"。
当我去掉<h:outputText>标签时,setter方法正常调用。
execute
,您基本上可以控制在表单提交期间应处理哪些组件。请注意,在例如 PrimeFaces 中,这已经默认为@form
(并且他们将execute
重命名为process
(并将render
重命名为update
),这在我看来更有意义)。 - BalusC