这是我的样本支持bean。
@ManagedBean
@SessionScoped
public class Sample {
private String dateText;
public Sample(){
dateText = (new Date()).toString();
}
public String updateDate(){
setDateText((new Date()).toString());
return null;
}
public String getDateText() {
return dateText;
}
public void setDateText(String dateText) {
this.dateText = dateText;
}
}
情景01
<h:head></h:head>
<h:body>
<h:form>
<h:inputText id="txtFirst" value="#{sample.dateText}"/>
<h:inputText id="txtSecond" value="#{sample.dateText}"/>
<h:commandButton action="#{sample.updateDate}"/>
</h:form>
</h:body>
情景02
<h:head></h:head>
<h:body>
<h:form>
<h:inputText id="txtFirst" value="#{sample.dateText}"/>
<p:inputText id="txtSecond" value="#{sample.dateText}"/>
<h:commandButton action="#{sample.updateDate}"/>
</h:form>
</h:body>
情景03
<h:head></h:head>
<h:body>
<h:form>
<h:inputText id="txtFirst" value="#{sample.dateText}"/>
<p:inputText id="txtSecond" value="#{sample.dateText}"/>
<p:commandButton action="#{sample.updateDate}"/>
</h:form>
</h:body>
情景04
<h:head></h:head>
<h:body>
<h:form>
<h:inputText id="txtFirst" value="#{sample.dateText}"/>
<p:inputText id="txtSecond" value="#{sample.dateText}"/>
<p:commandButton action="#{sample.updateDate}" update="@form"/>
</h:form>
</h:body>
点击commandButton
,
场景01 :工作正常。我可以从inputText
字段中看到新的日期值,而无需手动刷新页面。
场景02 :刷新页面。看不到任何ajax行为。那里有新的价值观。
场景03 :什么都没发生。没有刷新。没有价值变化。要查看我必须手动刷新页面的值。
场景04 :类似于场景01
请有人给我一些关于这些组件发生了什么的解释。
我使用过ICEfaces
,但我没有看到这样的东西。
谢谢!
答案 0 :(得分:1)
IceFaces能够确定在调用ajax操作时应刷新哪些组件。使用标准的JSF + Primefaces,您无法实现这样的自动化,因此您必须自己指定已执行和更新的组件。
p:commandButton
的默认ajax行为,它会执行操作但不会呈现其他组件 - 因此您只能在刷新后看到更改所以行为实际上并不“奇怪”:)