Bean属性未更新

时间:2012-01-06 10:02:03

标签: jsf-2 primefaces managed-bean method-invocation

我的bean是viewcoped。我有一个带有getter和setter的简单字符串属性。 getter工作正常(通过初始化属性检查),但不是setter。在setter方法中,我使用每个传入参数构建一个Stringbuffer。

代码:

public String getParamval() {
    return paramval;
}

public void setParamval(String paramval) {
    logger.info("Incoming value:" + paramval);
    pvals.append(paramval);
    this.paramval = "VAL";
}

这是错的吗?我已在setter中测试以查看是否正在传递输入字符串,但显然该方法根本没有被调用/调用。在视图中使用#{}表示法。

查看:

<c:forEach items="${gdsiGeodataBean.requiredfields}" var="reqs">
        <h:outputLabel  value="#{reqs}:* " />  
        <pou:inputText value="#{gdsiGeodataBean.paramval}" required="true" requiredMessage="Input is required."/> 
</c:forEach>

为什么我想在setter方法中构建一个stringbuffer?因为,inputtext是基于动态列表动态创建的。我只有一个bean属性要绑定。

我知道我可以使用地图,但出于与上述相同的原因,我似乎无法在setter方法中更新地图值。这与我在此问Updating a map value in a managed bean

的问题有关

1 个答案:

答案 0 :(得分:3)

即使方法完全错误(在提交表单后getter也不会返回正确的值!)并且我已经回答了你的previous question关于使用地图的问题,应该真正调用setter在这种特殊情况下。

没有调用setter可能有几个原因。最着名的是表单没有放在<h:form>内,或者你错误地将多个<h:form>嵌套在彼此之内。另一个原因是输入组件或其父项之一具有rendered属性,恰好在提交请求期间评估false