Проблемы с очисткой InputText в таблице данных JSF

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

Очевидное решение — установить для кнопки «immediate=true». Это избавляет от проблемы и позволяет мне отменить без проверки, НО сами поля не устанавливаются в исходные значения. Это связано с тем, что сами компоненты никогда не получают данные из резервных компонентов, ПОТОМУ ЧТО для параметра немедленно установлено значение true.

Это очень хорошо объясняется в этой статье: http://wiki.apache.org/myfaces/ClearInputComponents

В статье представлено множество решений, но ни одно из них мне не подходит.

  • Я должен оставаться на той же странице, поэтому смена взглядов невозможна.
  • Я не могу сбросить значения ВСЕХ полей ввода на странице, потому что я хочу сбросить только «строку», которую я отменяю.
  • Кажется, я не могу привязать компоненты ни к одному из полей ввода, потому что, поскольку они находятся в данных, атрибут «binding» самого поля ввода не может ссылаться на переменную «var». Например, следующий атрибут «binding» является недопустимым и выдает ошибку:

    ‹ice:dataTable id="poolSharesTbl" var="node" value="#{poolSharesManager.nodeModel}" ... ‹ice:column› ‹ice:inputText binding="#{node.inputTextBinding}" ...

Это может быть связано с тем, что 'var' является только областью запроса.

В любом случае, есть ли у кого-нибудь идеи о том, как заставить это работать?


person wsaxton    schedule 23.02.2010    source источник


Ответы (2)


Это больно делать с JSF. У вас очень мало контроля над проверкой. Лучше всего использовать JavaScript для сброса значений. Это делается всего в нескольких строках (или в строке с jQuery) вместо десятков или сотен, которые вы бы сделали для обходной путь - способ jsfish.

person BalusC    schedule 23.02.2010
comment
Я не думаю, что вы можете сбросить значения до исходных, используя javascript, если у вас, например, каждое поле inputText имеет partialSubmit=true, как я делаю. Сброс javascript, вероятно, просто сбросит их до последнего связанного значения... а не только до их исходных. Вероятно, вам придется иметь скрытые поля, чтобы они совпадали с каждым полем ввода, содержащим исходное значение, а затем копировали скрытое значение в поле ввода при сбросе. Правильно? - person wsaxton; 25.02.2010
comment
Тогда вам нужно уточнить, что вы имеете в виду под перезагрузкой. - person BalusC; 25.02.2010

В любом случае, я использовал обходной путь, который потребовал всего около 50 строк кода, более или менее, чтобы вручную выполнить проверку и преобразовать значения inputtext (которые являются строками по умолчанию) в целые числа. Раньше у меня был плохой опыт смешивания javascript с JSF (библиотека Вудстока), поэтому я боюсь снова вводить его в среду;)

person wsaxton    schedule 25.02.2010
comment
О, Вудсток действительно делает JSF еще более болезненным. Удачи. - person BalusC; 25.02.2010