Ссылка на компонент формы из таблицы данных вне ‹h:form›

Я хотел бы сослаться на компонент id=contractIdInputText в приведенной ниже форме из тега с данными в командной ссылке. Я хочу использовать его идентификатор в атрибуте рендеринга вместо @all. Я использовал @all ниже только потому, что не смог сослаться на идентификатор. Datatable находится снаружи и над тегами.

<h:form id="contracts">
   <h:outputScript library="js" name="common.js" target="head"/>
   <h:panelGrid columns="3"   columnClasses="rightalign,leftalign,leftalign">

   <h:outputLabel for="contractIdInputText" rendered="true" value="Contract Nooo.: " />
   <h:inputText id="contractIdInputText" required="true"                                         value="#contractManager.newContractId}" />
</form>

Это ссылка на таблицу данных:

 <h:commandLink id="editLink" value="#{bundle.ListUnitEditLink}" 
     action="#{contractManager.updateContract}">
     <f:ajax onevent="disablePK" render="@all" />
 </h:commandLink>

Вся цель ajax в ссылке - отключить компонент формы, когда я нажимаю ссылку команды и заполняю форму. Я также заметил, что так же, как использование @all делает то, что я хочу (заполнение формы с отключенным inputText), это приводит к тому, что мне нужно дважды щелкнуть командную ссылку на командной ссылке в таблице данных, чтобы форма была заполнена другим пункт. почему это происходит?


person Abiri Masoni    schedule 08.08.2012    source источник
comment
Я поместил всю таблицу данных в тег ‹h:form› и удалил теги ‹h:form›, которые окружали ссылки на команды. Это решило проблему двойного щелчка по команде.   -  person Abiri Masoni    schedule 08.08.2012


Ответы (1)


Если они не находятся в одном родительском NamingContainer , тогда вы должны просто сослаться на другой компонент по его абсолютному идентификатору клиента вместо (недопустимого) относительного идентификатора клиента. Абсолютный идентификатор клиента — это полный идентификатор клиента (как вы можете видеть в сгенерированном выводе HTML), с префиксом символа-разделителя контейнера именования (который по умолчанию равен :).

Итак, это должно сделать

<f:ajax ... render=":contracts:contractIdInputText" />

(при условии, что <form id="contracts"> сам по себе не находится в другом родительском элементе NamingContainer, опять же, просто проверьте сгенерированный вывод HTML, чтобы убедиться)

Что касается того, почему вам нужно дважды щелкнуть ссылку команды, это, скорее всего, связано с ошибкой спецификации JSF 790< /а>. Исправление состояло бы в том, чтобы явно включить другую форму в файл render. См. также Ajax-рендеринг контента, который содержит другую форму.

person BalusC    schedule 08.08.2012