привязка ввода в пользовательском интерфейсе: повтор в jsf

я использую facelets jsf 2.0 с библиотекой компонентов primefaces 3.0.M2. я пытаюсь добиться динамического количества строк, включая поля ввода, которые заполняются, когда происходит выбор данных.

всякий раз, когда делается выбор, динамические строки генерируются правильно с полями ввода, но после первого выбора для следующих выборов динамический счетчик строк изменяется правильно, но поля ввода не обновляются и продолжают отображать входные данные из первого выбора.

вот как я перебираю список в Facelet;

<ui:repeat value="#{goalEntranceBean.selectedCard.parameterList}" var="prmBean" >
        <li><h:outputText value="#{prmBean.lookUp.value}"/></li>
        <li>

            <h:outputText value="Weight:"/>
            <p:inputText id="wx" required="true" value="#{prmBean.weight}">
            </p:inputText>
            <h:outputText value="Percent:"/>
            <p:inputText required="true" value="#{prmBean.percent}">
            </p:inputText>
        </li>

    </ui:repeat>

мой компонент, где я получаю список карт и устанавливаю selectedCard с событием rowSelect в таблице данных.

@ManagedBean(name = "goalEntranceBean")
@ViewScoped
public class GoalEntranceAction implements Serializable {

private List<ScoreCard> personalCards = new ArrayList<ScoreCard>();

    private ScoreCard selectedCard = new ScoreCard();
......
}

когда я проверил в режиме отладки, я вижу истинный список, но на экране элементы не меняются.


person ASLAN    schedule 16.08.2011    source источник


Ответы (3)


Это распространенная проблема (задается каждые пару дней). Короче говоря, входные данные внутри ui:repeat не работают, и точка.

Это проблема с JSF, давняя и известная. Может быть, это будет исправлено. Может быть, нет, кажется, что это никого не волнует (я имею в виду - вход? в... ui:repeat? такой сумасшедший сценарий!).

Быстрое исправление состоит в том, чтобы использовать h: dataTable, возможно, безбожно злоупотребляя css, чтобы он выглядел как список. Долгое исправление заключается в использовании некоторого итератора из другой библиотеки. В Primefaces есть элемент, который должен работать и отображать неупорядоченный список.

person fdreger    schedule 17.08.2011

спасибо за ваши ответы. Извините, что забыл поделиться решением. Как я уже упоминал выше, у меня есть данные о простых лицах. В событии выбора строки я отображаю данные и хочу обновить ячейки этой таблицы данных. ИСПОЛЬЗОВАНИЕ p: inputtext легко решило мою проблему. Теперь я могу изменить данные на экране и увидеть значения после операции обновления на экране. Я не понимаю причину, но это работает.

  <p:dataTable var="orgPrmBean"
                 value="#{scoreCardOperationsBean.selectedCard.orgParameterList}"
                 emptyMessage="#{labels.norecord}"
                 rowKey="#{orgPrmBean.id}"
            >

        <p:columnGroup type="header">
            <p:row>
                <p:column headerText="Parameters" colspan="3" style="text-align:left;width:480;"/>
            </p:row>
        </p:columnGroup>


        <p:column style="text-align:left;width:200px;">
            <h:outputText value="#{orgPrmBean.info}"/>
        </p:column>

        <p:column style="text-align:left;width:180px;">
            <p:inputText value="#{orgPrmBean.weight}"
                         rendered="#{scoreCardOperationsBean.selectedCard.goalEdit}">
                <f:convertNumber maxFractionDigits="0"/>
            </p:inputText>

        </p:column>  

    </p:dataTable>
person ASLAN    schedule 13.02.2012

МОЖНО заставить его работать, но решение состоит в том, чтобы привязать входные данные к вспомогательному компоненту и обновить значения элементов управления в вспомогательном компоненте через прослушиватели (используя новое значение, полученное в аргументе). Очевидно, что это не очень хорошее решение, если у вас сложная форма, так как вам нужно добавить прослушиватель/элемент управления в вспомогательный компонент для каждого элемента управления на странице, но это практично, если у вас есть только один или два входа.

person user1083646    schedule 13.12.2011