当我重置bean的属性时,jsf inputText没有刷新

时间:2017-05-18 10:24:24

标签: jsf partial-page-refresh

我的屏幕看起来像这样

enter image description here

问题在于,当我按下重置按钮时,代码输入字段不会像预期的那样清除。

jsf如下:

<h:form id="form1">
    <h:inputText id="code" value="#{MyBean.data.code}" />

    <a4j:commandButton  immediate="true"
        action="#{MyBean.clear}" render="form1" update="@form">
    </a4j:commandButton>

    <h:outputText value="#{session.lastAccessedTime}">
          <f:convertDateTime pattern="HH:mm:ss.SSS" type="date" />
    </h:outputText>
</h:form>

bean代码如下:

public class MyBean {

    DataInnerClass data = new DataInnerClass(); 
    //getter and setter for data

    public class DataInnerClass {

        private String code;
        //getter and setter for code

        public DataInnerClass() {
            super();
        }
    }

    public void clear() {        
        data = new DataInnerClass();
        Logger.getLogger( MyBean.class.getName() ).log(Level.SEVERE, "data.code="+data.code);
        //logs data.code=null
    }
}

当我按下Reset按钮时,日志显示字段code的值已变为null(不再是'ZZ');我也知道屏幕刷新成功,因为我显示了当前时间,每次点击后都会更新。因此,支持bean属性更改,屏幕刷新,输入字段仍然保持相同的值。你知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

我找到了有用的BalusC答案:How can I populate a text field using PrimeFaces AJAX after validation errors occur?

我从那里了解到,在某些验证错误的情况下,输入字段将保留用户输入的值,并且将与辅助bean不同步。我必须强调,在我的情况下,没有验证错误,但仍然为<f:ajax resetValues>添加commandButton为我工作。

resetValues属性的具体示例位于https://jsflive.wordpress.com/2013/06/20/jsf-22-reset-values/

最后,我的按钮标签如下所示:

<a4j:commandButton  immediate="true"
    action="#{MyBean.clear}" render="form1" update="@form">
    <f:ajax render="code" resetValues="true" />
</a4j:commandButton>