我的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
的问题有关答案 0 :(得分:3)
即使方法完全错误(在提交表单后getter也不会返回正确的值!)并且我已经回答了你的previous question关于使用地图的问题,应该真正调用setter在这种特殊情况下。
没有调用setter可能有几个原因。最着名的是表单没有放在<h:form>
内,或者你错误地将多个<h:form>
嵌套在彼此之内。另一个原因是输入组件或其父项之一具有rendered
属性,恰好在提交请求期间评估false
。