Jsf PrimeFaces命令按钮在提交时不更新表单

Jsf 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());

这是我的示例支持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>

当我单击
命令按钮时

场景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,还有很多东西需要学习。