将参数传递到同一页面中的对话框

时间:2012-01-12 17:12:32

标签: jsf primefaces

我有一个页面包含一个嵌套在对话框中的表单和其他表单。 当在主窗体中单击按钮时,我需要将参数传递给对话框

<h:form>
<p:dataTable var="form" value="#{myBean.formList}">
     <p:commandButton id="selectProduct" 
                            update="selectProductForm" oncomplete="selectProductDlg.show()" 
                            image="ui-icon-" > 
                            <f:param name="formId" value="#{form.id}" />
                </p:commandButton>
</p:dataTable>
</h:form>

<p:dialog>
...<h:form>
<p:commandButton action="#{myBean.setSelected}"
                    update="main_form"
                    oncomplete="if(#{myBean.errorText == 'SUCCESS'}){ selectProductDlg.hide();}"
                    value="Sec">
                </p:commandButton>


 

我无法在myBean中看到带有代码的formId:

if (form == null) {
            HttpServletRequest req = (HttpServletRequest) FacesContext
                    .getCurrentInstance().getExternalContext().getRequest();
            if(req.getParameter("formId") != null) {
                formId = Long.valueOf(req.getParameter("formId"));
            }
            if (formId != null && !"".equals(formId)) {
                form = formService.findById(formId);
            } 
        }
我错了 感谢

2 个答案:

答案 0 :(得分:22)

假设bean在视图范围内,只需在数据表列的命令按钮的action方法中将其设置为bean属性direclty。

<h:form>
  <p:dataTable var="form" value="#{myBean.formList}">
    <p:column>
      <p:commandButton id="selectProduct" 
                       action="#{myBean.setCurrentForm(form)}"
                       update="selectProductForm" oncomplete="selectProductDlg.show()" 
                       image="ui-icon-"> 
      </p:commandButton>
    </p:column>
  </p:dataTable>
</h:form>

<p:dialog>
  <h:form>
    <p:commandButton action="#{myBean.setSelected}"
                     update="main_form"
                     oncomplete="if(#{myBean.errorText == 'SUCCESS'}){ selectProductDlg.hide();}"
                     value="Sec">
    </p:commandButton>
  </h:form>
</p:dialog>

如果对话框中有取消按钮,则需要让其操作方法将其设置为null

没有必要在POST请求中摆弄原始HTTP请求参数。 <f:param>应尽可能仅在GET请求中使用(例如<h:link><h:button>等。

答案 1 :(得分:-1)

我简单地调用了PDataTables的数据模型,如下所示。

  1. 在Java Bean中我正在刷新后端receiveFdnsController.refreshData方法的数据。
    1. 要在隐藏对话框后刷新表单中的数据,我将数据模块刷新为#{receivedFdnsController.newReceivedFdnsDataModel}。更多细节如下所示。
  2. 此致 Khaleel