1

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

谢谢!

4

1 回答 1

1

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

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

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

于 2013-06-12T11:44:11.823 回答