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

时间:2013-06-12 10:07:40

标签: jsf primefaces

这是我的样本支持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,但我没有看到这样的东西。

谢谢!

1 个答案:

答案 0 :(得分:1)

IceFaces能够确定在调用ajax操作时应刷新哪些组件。使用标准的JSF + Primefaces,您无法实现这样的自动化,因此您必须自己指定已执行和更新的组件。

  • 我忽略了scenarion 1,因为您提供的代码与方案2相同
  • 场景2根本没有ajax,因此整个页面都会提交
  • 方案3使用p:commandButton的默认ajax行为,它会执行操作但不会呈现其他组件 - 因此您只能在刷新后看到更改
  • 场景4使用ajax执行操作并渲染整个表单 - 因此在处理完成后可以看到更改

所以行为实际上并不“奇怪”:)