2012-01-06 74 views
0

我的bean是viewscoped。我有一个简单的字符串属性与getter和setter。吸气剂工作正常(通过初始化属性检查),但不是设置者。在setter方法中,我使用每个传入参数构建一个Stringbuffer。Bean属性未更新

代码:

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?因为输入文本是基于动态列表动态创建的。我只有一个要绑定的bean属性。

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

回答

3

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

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

+0

向导组件位于对话框组件内的之内。这个表单里面和对话框里都没有其他的形式。在视图中,渲染的属性没有设置为false。我想我需要检查viewtree来确定这一点。 – algone 2012-01-06 13:02:08

+0

发生了一些奇怪的事情。我用标记替换了标记,现在setter工作。这是为什么? – algone 2012-01-06 13:10:45

+0

显然你依赖于视图渲染时间表达式。长话短说:http://stackoverflow.com/questions/3342984/jstl-in-jsf2-facelets-makes-sense – BalusC 2012-01-06 13:14:51