Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pass parameter to dialog in the same page

Tags:

jsf

primefaces

I have a page contains a form and other form nested in a dialog. I need to pass parameter to dialog when button clicked in the main form

<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>


i can not see formId in myBean with code:

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);
            } 
        }

where am i wrong thanks

like image 814
merveotesi Avatar asked Jan 12 '12 17:01

merveotesi


1 Answers

Assuming that the bean is in the view scope, just set it as a bean property direclty in the action method of the command button in the datatable column.

<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>

If you have a cancel button in the dialog, you need to let its action method set it to null.

There's no need to fiddle around with raw HTTP request parameters in POST requests. The <f:param> should as much as possible be used in GET requests only (e.g. <h:link>, <h:button>, etc).

like image 195
BalusC Avatar answered Sep 27 '22 11:09

BalusC