JSF: inputText с конвертером в dataTable Проблема

Я создаю h: inputText для ячейки в h: dataTable с настроенным конвертером. Входной текст может быть преобразован, и преобразованный текст может быть отображен, если я перерисую всю таблицу.

Проблема в том, что перерисовка всей таблицы освободит фокус следующего поля ввода. Я пытаюсь объяснить это понятно.

Проблема, которая у меня есть:

  1. Ввод данных пользователем в ячейку таблицы.
  2. Пользователь нажимает клавишу табуляции и переходит к следующему полю ввода в таблице.
  3. При этом только что введенный текст будет немедленно преобразован и отображен.
  4. Но пользователь потерял фокус следующего поля ввода из-за перерисовки всей таблицы.

Я хочу:

  1. Ввод данных пользователем в ячейку таблицы.
  2. Пользователь нажимает клавишу табуляции и переходит к следующему полю ввода в таблице.
  3. При этом только что введенный текст должен быть немедленно преобразован и отображен.
  4. Пользователь не должен терять фокус следующего поля ввода (возможно, использовать частичный повторный рендеринг).

Я также пытаюсь присвоить идентификатор каждой отдельной ячейке для частичного повторного рендеринга, но я не знаю, как это сделать в dataTable.

У кого-нибудь есть решение проблемы? Спасибо.


person jozeph    schedule 17.02.2011    source источник


Ответы (2)


Просто укажите id выходного компонента в render атрибуте f:ajax.

<h:dataTable value="#{bean.model}" var="item">
    <h:column>
        <h:inputText value="#{item.value}">
            <f:ajax event="blur" render="output" />
        </h:inputText>
    </h:column>
    <h:column>
        <h:outputText id="output" value="#{item.value}" />
    </h:column>
</h:dataTable>
person BalusC    schedule 17.02.2011

Попробуй это:

<h:inputText value="#{item.value}">
  <f:ajax event="blur" render="@this" execute="@this"/>
</h:inputText>

Атрибут выполнения должен запускать преобразователь. Таким образом, вам не нужен отдельный outputText.

person Matt Handy    schedule 18.02.2011
comment
Я так понял, что он выводит преобразованный текст где-то, но не внутри того же компонента. - person BalusC; 18.02.2011
comment
Спасибо за ответ. Я хочу отображать преобразованный текст внутри поля ввода. Я использую jsf 1.2, а не 2.0, так что есть ли другое решение, кроме @this ?? - person jozeph; 18.02.2011
comment
Вы можете напрямую обратиться к идентификатору inputText. Просто замените @this идентификатором поля inputText. - person Matt Handy; 22.02.2011