最小示例对话框:
<p:dialog header="Test Dialog"
widgetVar="testDialog">
<h:form>
<p:inputText value="#{mbean.someValue}"/>
<p:commandButton value="Save"
onsuccess="testDialog.hide()"
actionListener="#{mbean.saveMethod}"/>
</h:form>
</p:dialog>
Run Code Online (Sandbox Code Playgroud)
我想要做的是让mbean.saveMethod以某种方式阻止对话框关闭,如果有问题并且只通过growl输出消息.这是验证器无法帮助的情况,因为在将保存提交给后端服务器之前无法判断someValue是否有效.目前我使用visible属性执行此操作,并将其指向mbean中的布尔字段.这有效,但它使用户界面变慢,因为弹出或关闭对话框需要命中服务器.
我在对话框中有一个表单,通过单击带有ajax的commandbutton来关闭该表单,
像这样
<h:commandButton value="Add" action="#{myBean.addSomething(false)}"
id="add_something_id" >
<f:ajax render="@form someTable" execute="@form"
onevent="closeAddNewSomethingDialogIfSucceeded"></f:ajax>
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)
这是关闭对话框的js代码
function closeAddNewSomethingDialogIfSucceeded(data) {
if(data.status === 'success') {
$("#dialog_id").dialog("close");
}
}
Run Code Online (Sandbox Code Playgroud)
直到这里没问题......
现在我将一些对话框表单字段更改为required="true"现在我想阻止关闭对话框我得到验证错误...
但是ajax data.status仍然达到了它的success状态,我无法弄清楚我可以挂钩的验证失败的迹象......
有任何想法吗?
感谢BalusC回答我做了以下事情:
在JSF中,补充道:
<h:panelGroup id="global_flag_validation_failed_render">
<h:outputText id="global_flag_validation_failed" value="true"
rendered="#{facesContext.validationFailed}"/>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
f:ajax变成了
<f:ajax render="@form someTable global_flag_validation_failed_render"
Run Code Online (Sandbox Code Playgroud)
并在js中添加了以下检查
if(data.status === 'success') {
if($("#global_flag_validation_failed").length === 0){
$("#dialog_id").dialog("close");
}
}
Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用PrimeFaces 3.2.我想知道设置a的渲染属性<p:dialog>与设置visible属性之间的区别.我应该何时使用这些属性中的任何一个?
我的Bean验证在我的应用程序中运行良好.现在我想检查新用户是否选择了已经选择的用户名.
在actionlistener中,我有检查数据库的代码,但如果用户选择已存在的用户名,如何强制用户被发送回他们所在的页面?
我有一个JSF 2应用程序,它有两个页面,一个用于列出学生,另一个用于显示给定学生的详细信息.列表页面包含指向学生表每行中详细信息页面的链接,该页面在浏览器中打开一个新选项卡,以便在单击时显示这些详细信息.
现在,需求已更改为在新选项卡中显示详细信息,但在列表页面中的模式对话框中.
我的想法是简单地将详细信息页面内容嵌入到模态对话框中,这样列表页面就不会太大而且难以维护.在这里开始我的怀疑.经过一番研究后,我将列表每行中的链接更改为以下按钮:
<p:commandButton value="Details" type="button"
onclick="PF('dialog-details').show()">
</p:commandButton>
Run Code Online (Sandbox Code Playgroud)
该对话框声明如下:
<p:dialog widgetVar="dialog-details" header="Details" modal="true" width="95%">
<ui:include src="student_details.xhtml">
<ui:param name="id" value="#{student.id}"/>
</ui:include>
</p:dialog>
Run Code Online (Sandbox Code Playgroud)
最后,详细信息页面更改为如下所示:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<f:metadata>
<f:viewParam name="id" value="#{studentBean.id}" />
</f:metadata>
<h1 class="title ui-widget-header ui-corner-all">Details of #{studentBean.bean.name} / #{studentBean.bean.number}</h1>
</ui:composition>
Run Code Online (Sandbox Code Playgroud)
当我单击按钮时,对话框确实显示,内容是详细信息页面.我在对话框中看到以下内容:
Details of /
Run Code Online (Sandbox Code Playgroud)
根本没有错误,但应该显示的数据不是.设置了断点StudentBean.setId()(此方法加载以bean与Student传递的id对应的实例命名的属性),但它永远不会被命中.
经过一段时间的思考,我才明白为什么它不起作用.传递给详细信息页面的参数是student.id,但是在显示所有学生时student使用的名称,因此无效在其中.var<p:datatable/>student<p:dialog/><p:datatable/>
所以,我需要的是一种使用给定行中相应学生的id来显示对话框的方法.理想情况下,我想在这里进行ajax调用,因此细节只有在被绑定时才会加载.
有任何想法吗?
我想在单击提交按钮时显示一些带有一些inputText字段的requiredMessages的弹出窗口.但只是在有这些消息的情况下.我已经在oncomplete标签上尝试使用bean变量和javascript,但我无法使其正常工作.如果我在p:对话框中输入visible ="true",则会始终显示弹出窗口,但我尝试从commandButton控制它.现在,我有这个,但弹出窗口永远不会显示:
<h:inputText id="Scheme"
required="true"
requiredMessage="Required.">
</h:inputText>
<h:commandButton id="submitModify" value="#{msg['systemdetail.modify']}"
action="#{sistem.modify}"
oncomplete="if (#{facesContext.maximumSeverity != null}) {dlg1.show();}">
</h:commandButton>
<p:dialog id="popup"
style="text-align:center"
widgetVar="dlg1"
modal="true">
<h:messages layout="table"/>
</p:dialog>
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?提前致谢.
当我尝试在oncomplete属性中进行测试时,显示对话框时出现问题。
但是当我刷新页面时它工作正常,我必须刷新支持 bean 中变量的每次更改。即使我在没有测试的情况下显示对话框,它也能正常工作。问题出在调试模式。get在调用操作后进行测试时,JSF 不会调用。
<p:commandButton value="#{msg.LABEL_ADD}"
action="#{axeBean.calculer}"
style="width:100px;"
update="msgs"
oncomplete="if(#{axeBean.formvalide}) PF('dialog').show()" />
Run Code Online (Sandbox Code Playgroud)
formvalide是一个boolean。
我该如何解决这个问题?
我在手风琴面板的标签内有一个文字区域,这是一个描述.我正在尝试编辑说明并保存它.我正在验证文本区域,以便最大字符不应超过1000个字符.我<p:message>用来显示验证消息.在实际保存之前,将显示确认对话框以确认保存.
<p:messages showDetail="true" autoUpdate="true" />
<p:accordionPanel dynamic="true">
<p:tab id="_0" title="description">
<p:inputTextarea styleClass="max" id="editDesc1" widgetVar="txtBox" value="#{testBean.description}"
rows="6" cols="150" validatorMessage="#{msg.AddSystem_validationMsg5}" autoResize="false">
<f:validateLength maximum="1000"></f:validateLength>
</p:inputTextarea>
<p:commandButton value="save" oncomplete="saveDialog.show()"/>
<p:confirmDialog message="#{msg.EditSystem_confirmMsg1}" width="200"
showEffect="explode" hideEffect="explode"
header="Confirm" severity="alert" widgetVar="saveDialog">
<p:commandButton value="#{msg.EditSystem_confirmAnswer1}" action="#{testBean.saveEdit}" process="@this" />
<p:commandButton value="#{msg.EditSystem_confirmAnswer2}" onclick="saveDialog.hide()" type="button" />
Run Code Online (Sandbox Code Playgroud)
如果用户输入超过1000个字符并尝试保存,则验证消息会短时间出现,然后弹出确认对话框,导致验证消息消失.如果出现验证错误,如何防止确认对话框弹出?
jsf ×6
primefaces ×6
dialog ×3
jsf-2 ×3
validation ×3
ajax ×1
datatable ×1
javascript ×1
messages ×1
popup ×1