Jsf PrimeFaces命令按钮在提交时不更新表单
这是我的示例支持beanJsf PrimeFaces命令按钮在提交时不更新表单,jsf,primefaces,Jsf,Primefaces,这是我的示例支持bean @ManagedBean @SessionScoped public class Sample { private String dateText; public Sample(){ dateText = (new Date()).toString(); } public String updateDate(){ setDateText((new Date()).toString());
@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>
当我单击命令按钮时
场景01:工作正常。我可以从两个inputText
字段中看到新的日期值,而无需手动刷新页面
场景02:刷新页面。无法看到任何ajax行为。有了新的价值观
场景03:什么都没有发生。没有点心。没有值更改。要查看这些值,我必须手动刷新页面
场景04:与场景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>
请有人给我一个关于这些组件在这里发生了什么的小解释。
我用过冰脸
,但我没有看到类似的东西
谢谢大家! IceFaces能够确定在调用ajax操作时应该刷新哪些组件。使用标准JSF+Primefaces,您无法实现这样的自动化,因此您必须自己指定已执行和更新的组件
- 我忽略场景1,因为您提供的代码与场景2中的代码相同
- 场景2根本没有ajax,所以整个页面都被提交了
- 场景3使用默认的ajax行为
p:commandButton
,它只执行操作,不呈现其他组件,因此您只能在刷新后看到更改
- 场景4使用ajax执行操作,并对整个表单进行rendres-因此在处理完成后可以看到更改
因此,这种行为实际上并不“奇怪”:IceFaces能够确定在调用ajax操作时应该刷新哪些组件。使用标准JSF+Primefaces,您无法实现这样的自动化,因此您必须自己指定已执行和更新的组件
- 我忽略场景1,因为您提供的代码与场景2中的代码相同
- 场景2根本没有ajax,所以整个页面都被提交了
- 场景3使用默认的ajax行为
p:commandButton
,它只执行操作,不呈现其他组件,因此您只能在刷新后看到更改
- 场景4使用ajax执行操作,并对整个表单进行rendres-因此在处理完成后可以看到更改
因此,这种行为实际上并不“奇怪”:那么你是说
组件在默认情况下不能像
或
那样工作?不,他是说ICEfaces正在毫不含糊地改变默认的JSF行为。它加载一个附加的JS文件,将每个标准JSF命令组件静默地转换为支持ajax的组件,并默认为render=“@form”
。PrimeFaces不涉及标准JSF命令组件。顺便说一句,你以前也听说过:@BalusC:当然可以,谢谢你。我在考虑一个标准,但不同的图书馆使用自己的方式。我仍然在学习JSF,还有很多东西需要学习。所以你是说,
组件在默认情况下不能像
或
那样工作?不,他是说ICEfaces正在毫无疑问地改变默认的JSF行为。它加载一个附加的JS文件,将每个标准JSF命令组件静默地转换为支持ajax的组件,并默认为render=“@form”
。PrimeFaces不涉及标准JSF命令组件。顺便说一句,你以前也听说过:@BalusC:当然可以,谢谢你。我在考虑一个标准,但不同的图书馆使用自己的方式。我仍在学习JSF,还有很多东西需要学习。