是否可以重新利用在对话框中使用 ViewScoped bean 的 JSF 页面?
Is it possible to reutilize a JSF page that uses a ViewScoped bean inside a dialog?
我有一个使用 ViewScoped 托管 bean 的 JSF 页面,该页面需要一个从 URL.
传递的 viewParam
我正在使用 Primefaces 4.0,我想知道是否有办法在 p:dialog 中使用该 xhtml 页面,然后将一些参数传递给它。
我想调用该对话框的地方是具有不同 bean 的不同页面,ViewScoped 也是。
我的对话框实际上是这样的:
<p:dialog widgetVar="w_dialogAgregarInfo">
<h:form id="dialogAgregarInfo">
<p:tabView id="tabView">
<c:forEach items="#{iniciarProcesoController.mfuncionesAsociadas}" var="mFuncion" varStatus="loop1">
<p:tab id="t_funcion_#{loop1.index}" title="#{mFuncion.nombre}" titleStyle="font-size:15px;font-style: normal;font-weight: normal">
<f:subview id="tab_#{loop1.index}">
<o:massAttribute target="javax.faces.component.UIInput" name="disabled" value="#{mFuncion.soloLectura}">
<p:panelGrid id="pg_funcion_#{loop1.index}" style="margin: 0 auto; box-shadow: none; width: 100%">
<ui:include src="#{mFuncion.paginaFuncion}"></ui:include>
</p:panelGrid>
</o:massAttribute>
</f:subview>
</p:tab>
</c:forEach>
</p:tabView>
</h:form>
</p:dialog>
我像往常一样调用这个对话框:让它显示。
<p:commandButton value="Agregar información" oncomplete="w_dialogAgregarInfo.show()"/>
但它显示为空,很确定我需要以某种方式初始化对话框的控制器,但我不知道如何实现它,任何帮助将不胜感激,谢谢!!
您可以使用 DialogFramework
它允许您使用类似 :
的方式调用任何 xhtml
RequestContext.getCurrentInstance().openDialog("anyPage", options, params);
其中 "anyPage" 匹配您的 "anyPage.xhtml" 页面名称,选项是提供给对话框的一组属性。它需要像下面这样的 Map<String,Object>
:
Map<String, Object> options = new HashMap<>();
options.put("modal", "true");
options.put("draggable", "false");
options.put("resizable", "false");
options.put("position", "top");
options.put("dynamic", "true");
options.put("appendTo", "@(body)");
而params是页面接收的参数,需要一个Map<String, List<String>> params = new HashMap<>();
List<String> values = new ArrayList<>();
values.add("exampleValue");
params.put("exampleParam", values);
如何将参数传递给 DialogFramework?
使用您的参数创建地图:
Map<String, List<String>> params = new HashMap<String, List<String>>();
List<String> values = new ArrayList<String>();
values.add("value1");
values.add("value3");
params.put("paramKEy", values);
然后调用
RequestContext.getCurrentInstance().openDialog("yourxhtmlpath", options, params);
这是一个很好的例子,primefaces dialog framework.
您可以扩展您的 bean class 以具有与另一个 bean 名称相同的功能。
我有一个使用 ViewScoped 托管 bean 的 JSF 页面,该页面需要一个从 URL.
传递的 viewParam我正在使用 Primefaces 4.0,我想知道是否有办法在 p:dialog 中使用该 xhtml 页面,然后将一些参数传递给它。
我想调用该对话框的地方是具有不同 bean 的不同页面,ViewScoped 也是。
我的对话框实际上是这样的:
<p:dialog widgetVar="w_dialogAgregarInfo">
<h:form id="dialogAgregarInfo">
<p:tabView id="tabView">
<c:forEach items="#{iniciarProcesoController.mfuncionesAsociadas}" var="mFuncion" varStatus="loop1">
<p:tab id="t_funcion_#{loop1.index}" title="#{mFuncion.nombre}" titleStyle="font-size:15px;font-style: normal;font-weight: normal">
<f:subview id="tab_#{loop1.index}">
<o:massAttribute target="javax.faces.component.UIInput" name="disabled" value="#{mFuncion.soloLectura}">
<p:panelGrid id="pg_funcion_#{loop1.index}" style="margin: 0 auto; box-shadow: none; width: 100%">
<ui:include src="#{mFuncion.paginaFuncion}"></ui:include>
</p:panelGrid>
</o:massAttribute>
</f:subview>
</p:tab>
</c:forEach>
</p:tabView>
</h:form>
</p:dialog>
我像往常一样调用这个对话框:让它显示。
<p:commandButton value="Agregar información" oncomplete="w_dialogAgregarInfo.show()"/>
但它显示为空,很确定我需要以某种方式初始化对话框的控制器,但我不知道如何实现它,任何帮助将不胜感激,谢谢!!
您可以使用 DialogFramework
它允许您使用类似 :
的方式调用任何 xhtmlRequestContext.getCurrentInstance().openDialog("anyPage", options, params);
其中 "anyPage" 匹配您的 "anyPage.xhtml" 页面名称,选项是提供给对话框的一组属性。它需要像下面这样的 Map<String,Object>
:
Map<String, Object> options = new HashMap<>();
options.put("modal", "true");
options.put("draggable", "false");
options.put("resizable", "false");
options.put("position", "top");
options.put("dynamic", "true");
options.put("appendTo", "@(body)");
而params是页面接收的参数,需要一个Map<String, List<String>> params = new HashMap<>();
List<String> values = new ArrayList<>();
values.add("exampleValue");
params.put("exampleParam", values);
如何将参数传递给 DialogFramework?
使用您的参数创建地图:
Map<String, List<String>> params = new HashMap<String, List<String>>();
List<String> values = new ArrayList<String>();
values.add("value1");
values.add("value3");
params.put("paramKEy", values);
然后调用
RequestContext.getCurrentInstance().openDialog("yourxhtmlpath", options, params);
这是一个很好的例子,primefaces dialog framework.
您可以扩展您的 bean class 以具有与另一个 bean 名称相同的功能。