Как обновить форму составного компонента из другого составного компонента?
У меня проблема при попытке обновить внешнюю форму. Чтобы быть более понятным, у меня есть основная форма, которая включает в себя 2 разных составных компонента, давайте вызовем include1 и include2. Страница, которую я хочу обновить, это include2, который обновляется после поиска из include1.
это как 2 страницы включены.
<ui:define name="include1">
<ui:param name="mbean" value="#{currentBean}" />
<libcomp:include1 />
</ui:define>
<ui:define name="include2">
<ui:param name="mbean" value="#{currentBean}" />
<libcomp:include2>
</ui:define>
Теперь в include1 у меня есть кнопка, которая пытается обновить форму внутри include2
update="include2Form"
и в include2 у меня есть
<cc:implementation>
<h:form
id="include2Form">
Когда я пытаюсь загрузить страницу, я всегда получаю ошибку 500 о том, что "include2Form" не найден!
Я пробовал некоторые исследования, прежде чем приехать сюда, но никто не помог мне, я пытался изменить форму на div, пытался передать id по параметру, панель, форму с prependId=false и т. Д....
Используя fireBug, я обнаружил, что JSF или Primefaces добавляет случайную строку в мой идентификатор формы / компонентов... как
ID ="j_idt99:include2Form: MYTABLE"
Я думаю, что это является причиной моей проблемы, и я пытаюсь найти обходной путь.
Кто-нибудь может мне помочь, пожалуйста???
1 ответ
Прежде всего, дополнительная строка в вашем идентификаторе напрямую поставляется из JSF, не связанной с PrimeFaces, потому что сам Composite Component является UINamingContainer. Это ожидаемое поведение и даже необходимость, потому что в противном случае вы могли бы столкнуться с дублированием ID-конфликтов при многократном использовании одной и той же CC в одном и том же представлении.
На мой взгляд, плохой дизайн - иметь форму внутри Композитного компонента вообще. Чтобы улучшить возможность повторного использования, просто избавьтесь от этой формы и работайте с process
, partialSubmit
, может быть f:subView
так далее..
Кроме того, вы должны переосмыслить свой дизайн. Дело в том, что один составной компонент должен обновить s.th. за пределами компонента может быть индикатор того, что составной компонент не является идеальным подходом для удовлетворения ваших требований.
Однако, если вам действительно необходимо обновить некоторые части вашего представления за пределами составного компонента, просто передайте идентификатор того, что нужно обновить через составной атрибут, вашей CC, и пусть CC не заботится о том, что и где обновлять.
<composite:interface>
<composite:attribute name="update" required="true" />
</composite:interface>