【问题标题】:Dynamic input values not updated in backing bean支持 bean 中未更新的动态输入值
【发布时间】:2011-07-31 14:01:53
【问题描述】:

我创建了一个动态输入字段,该字段会根据项目类型而变化。

<h:panelGrid columns="2" cellpadding="10">
    <c:forEach items="#{tabVar.items}" var="itmVar">
        <h:outputText value="#{itmVar.label}:" />
        <c:if test="#{itmVar.isString}"> 
            <p:inputText id="#{itmVar.id}" value="#{itmVar.value}" required="#{itmVar.isEditable}" disabled="#{itmVar.isEditable}" valueChangeListener="#{tabBean.processValueChange}" maxlength="100" size="75" immediate="true" onchange="form1.submit()"/>
        </c:if>
        <c:if test="#{itmVar.isDate}"> 
            <p:calendar id="#{itmVar.id}" value="#{itmVar.value}" required="#{itmVar.isEditable}" disabled="#{itmVar.isEditable}" valueChangeListener="#{tabBean.processValueChange}" onSelectUpdate="form1.submit();"/>
        </c:if>
        <c:if test="#{itmVar.isDouble}"> 
            <p:inputText id="#{itmVar.id}" value="#{itmVar.value}" required="#{itmVar.isEditable}" disabled="#{not itmVar.isEditable}" valueChangeListener="#{tabBean.processValueChange}" maxlength="100">
                <f:validateDoubleRange minimum="#{itmVar.minDouble}" maximum="#{itmVar.maxDouble}" />
            </p:inputText>                                                
        </c:if>
        <c:if test="#{itmVar.isInteger}"> 
            <p:inputText id="#{itmVar.id}" value="#{itmVar.value}" required="#{itmVar.isEditable}" disabled="#{not itmVar.isEditable}" valueChangeListener="#{tabBean.processValueChange}" maxlength="100">
                <f:validateLongRange minimum="#{itmVar.minLong}" maximum="#{itmVar.maxLong}" />
            </p:inputText>
        </c:if>
    </c:forEach>
</h:panelGrid>

一切都正确呈现,但是当我更改并提交输入值时,它不会在支持 bean 中更新。这是如何引起的,我该如何解决?

【问题讨论】:

  • 如果我是你,我会发布支持 bean 的代码,而不是期望人们进行猜测。此外,我会更具体地说明哪些值没有被更新。通常的嫌疑人是视图根目录中 UIInput 组件的 ID。

标签: jsf primefaces dynamic-forms


【解决方案1】:

#{tabBean.processValueChange} 可能不对。不可能对所有值仅使用 1 种 valueChangeListener 方法。您可以在 ManagedBean 中发布您的完整代码吗?是在@SessionScope 上吗? valueChangeListener 的正确方法可能是这样的:

public void saveStatus(ValueChangeEvent event) {
        Integer newValue = (Integer) event.getNewValue();//this is for save Status
        itmVar.setStatus(newValue);
    }

如果你想保存一个序列值,你必须创建一个序列方法:) 祝你好运!

【讨论】:

    猜你喜欢
    • 2014-03-20
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    相关资源
    最近更新 更多