Динамические входные значения не обновляются в резервном компоненте

Я создал динамическое поле ввода, которое меняется в зависимости от типа элемента.

<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>

Все отображается правильно, но когда я изменяю и отправляю входные значения, они не обновляются в компоненте поддержки. Как это вызвано и как я могу решить эту проблему?


person Jagath Wijetunge    schedule 31.07.2011    source источник
comment
На вашем месте я бы разместил код компонента поддержки вместо того, чтобы ожидать, что люди будут гадать. Кроме того, я бы более конкретно указал, какие значения не обновляются. Обычно подозреваемыми будут идентификаторы компонентов UIInput в корне вашего представления.   -  person Vineet Reynolds    schedule 01.08.2011


Ответы (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);
    }

Если вы хотите сохранить серию значений, вам нужно создать серию методов :) удачи!

person BlackKat    schedule 18.03.2013