【问题标题】:Bean properties not being updatedBean 属性未更新
【发布时间】:2012-02-04 01:55:28
【问题描述】:

我的 bean 是 viewscoped。我有一个带有 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 方法中构建一个字符串缓冲区?因为,输入文本是基于动态列表动态创建的。我只有一个 bean 属性可以绑定。

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

有关

【问题讨论】:

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


    【解决方案1】:

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

    setter 未被调用可能有多种原因。最著名的是表单没有放在&lt;h:form&gt; 内,或者您错误地将多个&lt;h:form&gt;s 相互嵌套。另一个原因是输入组件或其父组件具有rendered 属性,该属性恰好在提交请求期间评估false

    【讨论】:

    • 向导组件位于对话框组件内的
      内。此表单内和对话框组件中都没有其他表单。在视图中,没有任何地方将渲染属性设置为 false。我想我需要检查视图树以确定这一点。
    • 发生了一些奇怪的事情。我用 标签替换了 标签,现在 setter 可以工作了。为什么会这样?
    • 显然您依赖于视图渲染时间表达式。长话短说:stackoverflow.com/questions/3342984/…
    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多