Несколько дней назад я изменил mojarra на myfaces, чтобы решить this problem, теперь у меня возникла странная проблема с рендерингом моих составных компонентов, они просто не отображаются во второй раз, когда я открываю одно всплывающее окно (всплывающее окно также является составным компонентом).JSF 2.0 - У моих поверхностей проблемы с отображением составных компонентов
В первый раз, как вы можете видеть в FIELDSET, все оказывается в порядке:
затем я нажимаю на «CANCELAR» (отменить) кнопку, а второй раз, ни один из моих составных компонентов, за исключением диалог, визуализируется:
, когда я смотрел на бревне, я нашел эти сообщения:
[#|2012-04-10T15:22:00.681-0300|SEVERE|glassfish3.1.1|org.apache.myfaces.renderkit.html.HtmlCompositeComponentRenderer|_ThreadID=19;_ThreadName=Thread-2;|facet UIComponent.COMPOSITE_FACET_NAME not found when rendering composite component prevenda:popupPreVenda:j_id_2uz|#]
[#|2012-04-10T15:22:00.684-0300|SEVERE|glassfish3.1.1|org.apache.myfaces.renderkit.html.HtmlCompositeComponentRenderer|_ThreadID=19;_ThreadName=Thread-2;|facet UIComponent.COMPOSITE_FACET_NAME not found when rendering composite component prevenda:popupPreVenda:inputRazaoSocial|#]
[#|2012-04-10T15:22:00.685-0300|SEVERE|glassfish3.1.1|org.apache.myfaces.renderkit.html.HtmlCompositeComponentRenderer|_ThreadID=19;_ThreadName=Thread-2;|facet UIComponent.COMPOSITE_FACET_NAME not found when rendering composite component prevenda:popupPreVenda:j_id_2vi|#]
[#|2012-04-10T15:22:00.685-0300|SEVERE|glassfish3.1.1|org.apache.myfaces.renderkit.html.HtmlCompositeComponentRenderer|_ThreadID=19;_ThreadName=Thread-2;|facet UIComponent.COMPOSITE_FACET_NAME not found when rendering composite component prevenda:popupPreVenda:j_id_2vn|#]
[#|2012-04-10T15:22:00.686-0300|SEVERE|glassfish3.1.1|org.apache.myfaces.renderkit.html.HtmlCompositeComponentRenderer|_ThreadID=19;_ThreadName=Thread-2;|facet UIComponent.COMPOSITE_FACET_NAME not found when rendering composite component prevenda:popupPreVenda:j_id_2vs|#]
как вы можете видеть, проблема в том, что MyFaces не может найти грань в композитном компоненте ... Единственный составной компонент, который использует фасетов hrgi: всплывающее окно:
<c:interface>
<c:attribute name="titulo" default="sem titulo" required="false"/>
<c:attribute name="renderizar" default="false" required="false"/>
<c:attribute name="modal" default="true" required="false"/>
<c:attribute name="bordaConteudo" default="true" required="false"/>
<c:facet name="cabecalho" required="false"/>
<c:facet name="conteudo" required="true"/>
<c:facet name="botoes" required="true"/>
</c:interface>
<c:implementation>
<h:outputStylesheet library="css" name="hrgiPopup.css" target="head"/>
<h:outputStylesheet library="css" name="clearfix.css" target="head"/>
<h:outputScript library="js" name="hrgiPopup.js" target="head"/>
<h:panelGroup layout="block" rendered="#{cc.attrs.renderizar}"
class="hrgi-dialog-panel clearfix">
<h:panelGroup layout="block" class="hrgi-dialog-overlay clearfix" rendered="#{cc.attrs.modal}"></h:panelGroup>
<h:panelGroup id="popup" layout="block" class="hrgi-dialog-box clearfix">
<h:panelGroup layout="block" class="hrgi-dialog-title clearfix">
<h:outputText style="float:left" value="#{cc.attrs.titulo}"/>
</h:panelGroup>
<h:panelGroup layout="block" class="hrgi-dialog-content clearfix">
<c:renderFacet name="cabecalho" required="false"/>
<h:panelGroup layout="block" class="hrgi-dialog-background clearfix"
rendered="#{cc.attrs.bordaConteudo}">
<c:renderFacet name="conteudo" required="true"/>
</h:panelGroup>
<h:panelGroup layout="block" class="clearfix" rendered="#{not cc.attrs.bordaConteudo}">
<c:renderFacet name="conteudo" required="true"/>
</h:panelGroup>
<c:renderFacet name="botoes" required="true"/>
<script type="text/javascript">
cercarEventoTab("#{cc.clientId}:popup");
</script>
</h:panelGroup>
</h:panelGroup>
</h:panelGroup>
</c:implementation>
Является ли это ошибка в MyFaces ?? Моджарра не вызывает никаких проблем!
ОБНОВЛЕНО
Проблема только происходит, когда пользователь нажимает кнопку «CANCELAR» ... Действие называют этот код, чтобы очистить поля и закрыть диалоговое окно:
public void cancelar(ActionEvent evento){
fechar();
UIComponent componente=evento.getComponent().getParent().getParent().getParent();
componente.getFacet("conteudo").getChildren().clear();
}
этот код был адаптирован из подходов вы можете видеть here. В этом случае воссоздаются только компоненты внутри фасета conteudo. Работает отлично, за исключением моих составных компонентов.
Веб-конфигуратор не помог, возможно, причина, по которой объявление тега составного компонента не выглядит неправильным: xmlns: hrgi = "ht р: //java.sun.com/jsf/composite/hrgi». Я добавил новую информацию. Спасибо за внимание. – brevleq
Я адаптировал «componente.getFacet (« conteudo »). GetChildren(). Clear();" из второго подхода вы можете увидеть здесь: https://cwiki.apache.org/MYFACES/clear-input-components.html. Есть ли другой способ я могу очистить все компоненты страницы без проблем в моих составных компонентах? – brevleq