Как вызвать p: диалог с помощью ui: include только после события события commandLink в JSF? - PullRequest
1 голос
/ 19 марта 2020

У меня есть следующий сценарий:

Page1.x html

<p:datatable>
<p:column>
<p:commandLink value="#{tableRow.businessObject.xyz"
                    action="#{view.backingBean.view}" 
                     partialSubmit="true" update="PageId2"
                    oncomplete="PF('PageVar2').show()">
                    <f:setPropertyActionListener value="#{tableRow}"
                        target="#{view.backingBean.selectedTableRow}" />
</p:commandLink>

<p:dialog modal="true" id="PageId2" widgetVar="PageVar2" 
                    closable="true" minimizable="true" style="background-color: white"      
                    header="Page2"
                    height="600" width="450" appendTo="@(body)">
                    <h:form>
                   <ui:include src="/.../Page2.xhtml"/>

    <p:commandButton value="close" onclick="PF('PageVar2').hide()" partialSubmit="true"/>                                    
                    </h:form>
</p:dialog>

</p:colum>
.
.

Page2.x html

.
.
<ui:composition>
   <ui:param name="backingBean" value="#{sessionBean.currentView['Page2BackingBean']}" />

<p:datatable>
<p:column>
 <h:outputLabel for="abc" value="ABC"/>
  <h:outputText id="abc" value="#{view.backingBean.businessObject.abc}" />
</p:column>
</p:datatable>
</ui:composition>
.
.

Находясь на action="#{view.backingBean.view}, он вызывает обобщенный класс view.java, который получит выбранную строку таблицы и создаст страницу просмотра для Page2. Но если я нажимаю на ссылку команды перед загрузкой Page1.xhtml, в браузере появляется сообщение об ошибке: javax.el.PropertyNotFoundException: Could not find property businessObject in Page1.xhtml.

Похоже, что при загрузке полной страницы она пытается загрузить написанную страницу внутри тега ui:include, т.е. Page2.xhtml, и он не может найти текущий BusinessObject во время загрузки экрана.

Как решить эту проблему ??

1 Ответ

0 голосов
/ 19 марта 2020

Я считаю, что вам нужно передать бин в качестве параметра Page2.xhtml. Ответ здесь: Передача компонента поддержки в качестве параметра в Facelet включает :

. Для этого вы можете использовать <ui:param>. Это должно быть вложено в <ui:include>.

<ui:include src="/.../Page2.xhtml"/>
    <ui:param name="Bean" value="#{YourBeanName}" />
</ui:include>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...