相关疑难解决方法(0)

提交后发生验证错误时,保持p:对话框打开

最小示例对话框:

<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中的布尔字段.这有效,但它使用户界面变慢,因为弹出或关闭对话框需要命中服务器.

validation ajax jsf dialog primefaces

64
推荐指数
4
解决办法
7万
查看次数

如何在执行ajax命令时查找验证错误(required ="true")的指示

我在对话框中有一个表单,通过单击带有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)

jsf-2

32
推荐指数
1
解决办法
3万
查看次数

<p:dialog>的渲染属性和可见属性之间的差异

我在我的项目中使用PrimeFaces 3.2.我想知道设置a的渲染属性<p:dialog>与设置visible属性之间的区别.我应该何时使用这些属性中的任何一个?

jsf primefaces

17
推荐指数
1
解决办法
3万
查看次数

如何在actionListener或action方法中执行JSF验证?

我的Bean验证在我的应用程序中运行良好.现在我想检查新用户是否选择了已经选择的用户名.

在actionlistener中,我有检查数据库的代码,但如果用户选择已存在的用户名,如何强制用户被发送回他们所在的页面?

validation jsf bean-validation

14
推荐指数
1
解决办法
2万
查看次数

如何在ap:对话框中显示p:dataTable中当前行的详细信息,并在保存后更新

我有一个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()(此方法加载以beanStudent传递的id对应的实例命名的属性),但它永远不会被命中.

经过一段时间的思考,我才明白为什么它不起作用.传递给详细信息页面的参数是student.id,但是在显示所有学生时student使用的名称,因此无效在其中.var<p:datatable/>student<p:dialog/><p:datatable/>

所以,我需要的是一种使用给定行中相应学生的id来显示对话框的方法.理想情况下,我想在这里进行ajax调用,因此细节只有在被绑定时才会加载.

有任何想法吗?

datatable jsf dialog master-detail primefaces

8
推荐指数
1
解决办法
1万
查看次数

如果这些消息存在,如何在primefaces中显示带有requiredMessages的弹出窗口?

我想在单击提交按钮时显示一些带有一些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)

我怎样才能做到这一点?提前致谢.

javascript jsf popup primefaces

2
推荐指数
1
解决办法
2万
查看次数

仅在通过自定义验证操作时才使用 oncomplete 显示 p:dialog

当我尝试在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

我该如何解决这个问题?

jsf primefaces jsf-2

2
推荐指数
1
解决办法
2139
查看次数

当出现验证错误时,防止打开确认对话框

我在手风琴面板的标签内有一个文字区域,这是一个描述.我正在尝试编辑说明并保存它.我正在验证文本区域,以便最大字符不应超过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个字符并尝试保存,则验证消息会短时间出现,然后弹出确认对话框,导致验证消息消失.如果出现验证错误,如何防止确认对话框弹出?

validation dialog messages primefaces jsf-2

1
推荐指数
1
解决办法
3597
查看次数