Передать параметр в диалог на той же странице
У меня есть страница, содержащая форму и другую форму, вложенную в диалог.
Мне нужно передать параметр в диалог, когда кнопка нажата в основной форме
<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>
Я не вижу formId в myBean с кодом:
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);
}
}
где я ошибаюсь
спасибо
Ответы
Ответ 1
Предполагая, что bean находится в области видимости, просто установите его как свойство свойства bean в методе действия кнопки команды в столбце данных.
<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
.
Нет необходимости возиться с необработанными параметрами запроса HTTP в запросах POST. <f:param>
должен как можно больше использоваться только в запросах GET (например, <h:link>
, <h:button>
и т.д.).
Ответ 2
Я просто назвал datamodel PDataTables, как показано ниже.
- В Java Bean Я обновляю данные из метода backend receivedFdnsController.refreshData.
- Чтобы обновить данные в форме, я вызываю обновление datamodel как # {receivedFdnsController.newReceivedFdnsDataModel} после скрытия диалога. Подробнее см. Ниже.
Отношения
Халиль