[英]JSF2 How to update different components from different pages
让我们从我的问题开始:
我有两页:专业和专业。
两者都有相同的模板: <ui:composition template="/common/decorators/template.xhtml">
template.xhtml
.
.
.
<app:metaHeader />
</h:head>
<h:body>
<app:status/>
<ui:debug hotkey="d" rendered="#{initParam['facelets.DEVELOPMENT']}" />
<div id="geral">
<div id="header">
<app:header />
</div>
<p:messages id="messages" showDetail="false" autoUpdate="true" closable="true" />
<ui:insert name="body" />
</div>
</h:body>
</html>
<app:header />
是:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:acegijsf="http://sourceforge.net/projects/jsf-comp/acegijsf"
xmlns:app="http://cni.org.br/tags"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:p="http://primefaces.org/ui" xml:lang="pt" lang="pt">
<div id="header">
<div class="content">
<h:form>
<div>
<p:outputPanel>
<label>You are in:</label>
<h:selectOneMenu id="cities" value="#{bean.selectedCity}"
converter="omnifaces.SelectItemsConverter">
<f:selectItems id="selectedCity" value="#{bean.cityList}"
var="city" itemLabel="#{city.name}" itemValue="#{city}" />
<p:ajax event="change" listener="#{bean.citySession}"
update="?????????" />
</h:selectOneMenu>
</p:outputPanel>
</div>
</h:form>
</div>
</div>
因此,当我在标题处选择一个城市时,我需要更新整个main.xhtml页面,但只需要更新professional.xhtml中的几个组件。
我尝试使用
<p:ajax event="change" listener="#{bean.citySession}" upate=":componentsIwant" />
<p:ajax event="change" listener="#{bean.citySession}" upate=":professionForm:componentsIwant" />
<p:ajax event="change" listener="#{bean.citySession}" upate=":general:professionForm:componentsIwant" />
但是componentIwant在main.xhtml(我选择要详细介绍的职业的页面)上不存在,所以我得到了:
找不到从“ j_id18836674_3d6516fd:cities”引用的表达式为“:componentsIwant”的组件。
有一种方法可以解决?
ps我不能更改模板,因为这是公司的标准。
我看到两种解决问题的方法:
表达语言
在您的<p:ajax />
update属性中使用EL,例如:
update="#{someBean.someCondition ? ':formId:componentId' : ''}"
要么
update="#{someBean.componentId}"
<ui:param />
通过参数传递组件ID:
<ui:composition template="/template.xhtml"> <ui:param name="componentId" value=":formId:componentId" /> ... </ui:composition>
并将其用作:
update="#{componentId}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.