是否可以在对话框中重用使用ViewScoped bean的JSF页面?

时间:2015-08-12 16:20:51

标签: jsf primefaces dialog jsf-2.2

我有一个与ViewScoped托管bean一起使用的JSF页面,该页面需要一个从URL传递的viewParam。

我正在使用Primefaces 4.0,我想知道是否有办法在p:对话框中使用该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()"/>

但它显示为空,非常确定我需要以某种方式初始化对话框的控制器,但我不知道如何实现这一点,任何帮助都会被贬低,谢谢!!

3 个答案:

答案 0 :(得分:2)

如何将参数传递给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.

答案 1 :(得分:1)

您可以使用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);

答案 2 :(得分:0)

您可以扩展bean类,使其具有与另一个bean名称相同的功能。