Jsf 保存时PrimeFaces对话框中的空属性
问题在于两个文本字段发送空字符串而不是键入的文本。他们在对话中。托管bean是视图范围的。此命令按钮打开对话框:Jsf 保存时PrimeFaces对话框中的空属性,jsf,primefaces,Jsf,Primefaces,问题在于两个文本字段发送空字符串而不是键入的文本。他们在对话中。托管bean是视图范围的。此命令按钮打开对话框: <p:commandButton id="btn-open_dialog-name_query" oncomplete="PF('dialog_name_query').show();" style="width: 209px; text-align: center;" va
<p:commandButton id="btn-open_dialog-name_query"
oncomplete="PF('dialog_name_query').show();"
style="width: 209px; text-align: center;"
value="Save Query" />
p:commandButton
内置了ajax功能,因此无需使用p:ajax
。我相信您的问题在于p:ajax
默认为process=“@this”
(在本例中仅表示commandButton
),因此不会提交p:inputText
。但是p:commandButton
默认为process=“@form”
,这就是您需要的:
<p:commandButton id="btn-save_query-client"
value="Save to current client"
action="#{dashboardDetailedMB.saveQueryClient}"
update="msg" />
另外,您的表单似乎在对话框中,我发现在对话框中放置表单并将对话框放在页面主表单下方是最安全的,但如果它正常工作,则无需更改它。谢谢!它还解决了另一个不困扰用户的问题:双重Ajax请求(可能是因为嵌套表单)。
public void saveQueryClient() {
try {
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
HttpServletRequest request = (HttpServletRequest) ec.getRequest();
HttpSession session = (HttpSession) request.getSession(false);
String querySql = (String) session.getAttribute("querySql");
query.setQuery(querySql);
queryBean.add(query);
queryBean.insertClientHasQuery(getClientId(), queryBean.getLastRow().getId());
jsfUtils.messages("INFO", "Query inserted!", "");
} catch (Exception ex) {
ex.printStackTrace(System.out);
jsfUtils.messages("ERROR", "Error when saving query to client!", "");
}
}
<p:commandButton id="btn-save_query-client"
value="Save to current client"
action="#{dashboardDetailedMB.saveQueryClient}"
update="msg" />