primefaces 相关问题

PrimeFaces是一个JSF(Java Server Faces)组件库,附带了大量丰富的组件,这些组件利用了jQuery和jQuery UI。它支持jQuery UI ThemeRoller CSS框架和FontAwesome图标集。请注意,此标签不应与[PrimeNG]结合使用。

仅当按下特定命令按钮时才根据需要验证输入

我有 JSF 验证的特定用例。例如我有一个 inputText 字段: 我有 JSF 验证的特定用例。例如我有一个 inputText 字段: <p:inputText id="input" required="#{myBean.required}" value="#{myBean.value}" maxlength="20" disabled="#{myBean.disabled}"> <p:ajax event="blur" process="@this" update="name" listener="#{myBean.listener}"/> </p:inputText> 输入的值是数字(在某些情况下,它也可以是字符串,因为这是复合组件的一部分,但如果我们假设这是一个数字,则可以更好地描述问题)。此输入是表单的一部分,在表单末尾我有提交按钮: <p:commandButton value="Save" actionListener="#{myBean.save}"/> 我的要求是什么: 按下提交按钮时,应处理所有验证,这是可以的,效果很好。 当在输入字段上触发模糊事件时,如果字段不为空,则应处理数字验证,这也可以。最后,我将 id name 的字段更新为一些值。 现在我有一个问题。我的第三个请求是当输入为空时不应处理输入验证。这是特殊情况,我将清除 id name 的字段。当我删除已在输入中输入的文本、从组件中删除焦点(例如按 TAB)时,也会出现这种情况,在这种情况下,还应该处理 AJAX 请求,并且名称输入也将被清除。 如何在输入字段为空时禁用对此字段的验证,并且仅针对此 ajax 事件? 让输入的 required 属性检查是否按下了保存按钮(可以通过隐式 EL 变量 #{param} 所提供的请求参数映射中其客户端 ID 的存在来识别)。 <h:form> <p:inputText ... required="#{param.containsKey(save.clientId) and myBean.required}" /> <p:commandButton binding="#{save}" ... /> </h:form> (注意:不要将其绑定到 bean 属性!代码按原样) 这样它只会在实际按下保存按钮时评估true。 或者,如果您对 binding 有问题和/或对按钮的客户端 ID 进行硬编码没有问题: <h:form id="formId"> <p:inputText ... required="#{param.containsKey('formId:buttonId') and myBean.required}" /> <p:commandButton id="buttonId" ... /> </h:form> 如果输入为空,只需在接受输入时删除必需的属性即可。然后编写一个自定义验证器,它只接受空输入或数字输入。 <p:inputText id="input" value="#{myBean.value}" maxlength="20" disabled="#{myBean.disabled}" validator="customerNumericInputValidator"> <p:ajax event="blur" process="@this" update="name" listener="#{myBean.listener}"/> </p:inputText> public class customerNumericInputValidator implements Validator { @Override public void validate(FacesContext facesContext, UIComponent uIComponent, Object object) throws ValidatorException { String number = (String) object; number = Strings.nullToEmpty(number).trim(); //if the request is a full request then number can not be empty if(!FacesContext.getCurrentInstance().isPostback() && Strings.isNullOrEmpty(number)) { FacesMessage message = new FacesMessage(); message.setSummary(Messages.getMessage("error empty value")); message.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(message); } if(!Strings.isNullOrEmpty(number)) { if(!isNumber(number)) { FacesMessage message = new FacesMessage(); message.setSummary(Messages.getMessage("error not numerical value")); message.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(message); } } } }

回答 2 投票 0

将 ICEfaces 迁移到 PrimeFaces 会导致警告:JSF1085:自定义范围“#{window}”计算为 null。托管 bean 未推送到范围

我正在尝试将我的项目从 jdk 1.7 mojarra 2.1.9 和icefaces 3.30 迁移到 Tomcat8.5 或更高版本上的 jdk8 mojarra 2.2.10 和 primefaces 12 我已经更改了所有库并且出现了登录页面...

回答 1 投票 0

Primefaces Calendar 当 required 为 true 时,不调用 Ajax 监听器

简介-我有 2 个 p:calendar 组件,calreq 需要 =“true” 而 calnotreq 是可选的。 代码 - p:calendar xhtml 代码与 ajax 调用 Intro-我有 2 个 p:calendar 组件,calreq 有 required="true" 而 calnotreq 是可选的。 代码- p:带有ajax调用的日历xhtml代码 <p:outputLabel value="Calendar Required" for="calreq" /> <p:calendar label="Calendar Required" id="calreq" required="true" inputStyle="width: 100px;" showOn="button" value="#{myBean.calReqObj}" > <p:ajax event="dateSelect" listener="#{myAction.calReqChange()}"/> <p:ajax event="change" listener="#{myAction.calReqChange()}"/> </p:calendar> <p:outputLabel value="Calendar Not Required" for="calnotreq" /> <p:calendar label="Calendar Not Required" id="calnotreq" inputStyle="width: 100px;" showOn="button" value="#{myBean.calNotReqObj}" > <p:ajax event="dateSelect" listener="#{myAction.calNotReqChange()}"/> <p:ajax event="change" listener="#{myAction.calNotReqChange()}"/> </p:calendar> 描述-它是一大块代码的一部分,并且正确地包装在form/panel/panelgrid内。当日期值从日历或键盘更改时,将调用两个 ajax 调用 calReqChange() & calNotReqChange()。 问题- calreq 的 ajax 侦听器在一种情况下未调用。当日期字段被清空/无效时,不会调用侦听器,相应的支持 bean 对象不会更新为 null。 (但是 calnotreq 监听器被调用) 这是什么原因以及如何解决? 注意-我在 p:ajax 中尝试了不同的属性,但没有任何帮助: immediate=true, process=@this, update=@this。 还尝试了 f:ajax 而不是 p:ajax。 请帮忙!! 抱歉写了答案,但我还不能发表评论:/ 您能把这两门课也放在这里吗?我也许可以帮助你解决这个问题,但这绝对看起来像是被调用类中的逻辑问题,因为 xhtml 是好的。

回答 1 投票 0

不稳定的 Primefaces 文件上传侦听器调用

有一个使用 JDK11、Primefaces 8.0、Spring Boot 2.3.0 的 Spring Boot 项目。 将其部署在 tomcat 9.0.35 上。在某些部署中,我的文件上传组件能够触发侦听器方法...

回答 2 投票 0

使用 primefaces 上传文件时不显示缩略图

我想在上传图像时不显示缩略图。我怎样才能删除它? 示例:https://lh3.googleusercontent.com/-nWDNS4695Lg/UtTy3-c9y2I/AAAAAAAAArY/USGOIL43Iyg/w979-h314-no/Capture4.PNG(SR,我...

回答 2 投票 0

我可以为 primefaces js 库添加源映射吗?

我在jsf项目上工作,我有p:fileUpload元素,我想调试上传过程。在哪里可以找到源映射并将其添加到 fileUpload.js 或其他 Primefaces 的 JS 库

回答 1 投票 0

图表轴刻度不完全可见

图表轴刻度不完全可见,因为在画布上的刻度上方绘制了某些内容。看起来这是 Primefaces 12 中的一个错误,但是有什么解决方法吗?以下是示例: 在这里你...

回答 1 投票 0

如何通过primefaces中的bean在selectOneRadio/selectCheckboxMenu中设置默认选定的项目

我想创建 selectOneRadio 列表和 selectCheckboxMenu ,这些项目从相关的 bean 对象中获取。 对于非选定列表,它运行良好。但是我如何为这些列表提供一些项目

回答 3 投票 0

从命令按钮调用另一个表单

当我提交表单时,它应该调用另一个表单,以便我可以渲染它。我使用 primefaces,我希望它能像下面这样工作。但它抛出一个错误。 html ...

回答 3 投票 0

从 WebSphere 迁移到 Springboot 的 JSF 应用程序会在导航期间重新加载同一页面,而不是加载单击的页面,而不会出现任何控制台错误

将 JSF 项目从 WebSphere 迁移到 Spring Boot(包括将其从 WAR 转换为 JAR)后,应用程序开始运行。然而,我们遇到了间歇性问题,其中...

回答 1 投票 0

PrimeFaces <p:tabView> 在 Wildfly 中使用动态=“true”中断 <p:ajax> – JBoss EAP 正在工作

我们有一个复杂的 Web 应用程序,通常通过 RedHat JBoss EAP 7.4 提供服务,我们尝试将其与 Wildfly 26.1.3 一起使用(最后一个在 javax → jakarta 之前)。对于 UI,我们使用 Primefaces 13.0.8 (...

回答 1 投票 0

加载主题时出错,找不到“primefaces-start”库的“theme.css”资源

当我在 Tomcat 服务器上运行我的项目时,它显示以下错误: 加载主题时出错,找不到“primefaces-start”库的“theme.css”资源 这是堆栈跟踪: javax.servlet。

回答 3 投票 0

Primefaces 数据表过滤器杀死设置分页器

我想在更新 PrimeFaces 数据表后保留过滤器和当前页面。 为此,我尝试在使用命令链接更新后过滤数据表。然后我会将相同的页面放在过滤器之前...

回答 1 投票 0

jQuery 版本增加后,Primefaces 页面加载缓慢

我之前的 Primefaces 版本是 6.0。我将其升级到 Primefaces 10.0(在其网站上迁移部分的帮助下)。Clean&Build 和 Debug 中没有错误。虽然没有

回答 1 投票 0

如何在不向服务器发送数据的情况下关闭表单内的模式窗口并防止页面重新加载?

我有一个带有 javaee 和 primefaces 的网络,并且我已将 bootstrap 集成到该项目中。 我知道使用 p:dialog 我可以执行与引导模式窗口相同的行为,但我实现了

回答 1 投票 0

如何将 primefaces 添加到我的 jsp 和 servlet 导航栏

我几乎所有的项目都在 jsp 和 servlet 中,现在我想将 primefaces 中的页面添加到我的导航栏...无论我尝试过什么,它都不会将其添加到我的项目中。 ..我是吗

回答 2 投票 0

如何展开treeTable的所有节点?

我有一个树表和两个按钮: 一个用于倒塌树和 另一个用于扩展, 但它们不起作用。在支持 bean 上,我做了 root.setExpanded(true);和 root.setExpanded(false);乙...

回答 5 投票 0

primefaces 中的密码匹配消息

我从这个 Primefaces http://blog.primefaces.org/?p=1512 博客中复制了有关简单密码验证的确切代码 我从这个 Primefaces http://blog.primefaces.org/?p=1512 关于简单密码验证的博客中复制了确切的代码 <h:outputLabel for="pwd1" value="Password 1: *" /> <p:password id="pwd1" value="#{registerMB.password}" feedback="false" match="pwd2" label="Password 1" required="true" /> <h:outputLabel for="pwd2" value="Password 2: *" /> <p:password id="pwd2" value="#{registerMB.password}" feedback="false" label="Password 2" required="true" /> <f:facet name="footer"> <p:commandButton value="Register" action="/pages/public/login" /> <p:commandButton value="Cancel" immediate="true" action="/pages/public/login" /> </f:facet> 验证有效,但我只能得到验证错误。永远不会显示密码 1 应与密码 2 匹配的消息。还有这个配置吗? 我下载了 Primefaces 3.4.1 尝试添加以下内容 p:password 标签内的 validatorMessage 属性 id="pwd2": <p:password id="pwd2" value="#{registerMB.password}" feedback="false" label="Password 2" required="true" validatorMessage="password 1 should match password 2"/> 添加 p:message 标签以在 h:form 标签下方显示错误 <p:messages id="messages" showDetail="true" autoUpdate="true"/> 添加<p:messages id="messages" showDetail="true" autoUpdate="true"/> 就像 int Primefaecs 密码展示 <h:form id="form">   <p:panel header="Match Mode"> <p:messages id="messages" showDetail="true" autoUpdate="true"/> <h:panelGrid columns="2" id="matchGrid"> <h:outputLabel for="pwd1" value="Password 1: *" /> <p:password id="pwd1" value="#{passwordBean.password5}" match="pwd2" label="Password 1" required="true"/> <h:outputLabel for="pwd2" value="Password 2: *" /> <p:password id="pwd2" value="#{passwordBean.password5}" label="Password 2" required="true"/> </h:panelGrid> <p:commandButton id="saveButton" update="matchGrid" value="Save" /> </p:panel> </h:form>   您可以使用命名空间 jsf/core 中的元素命名属性 xmlns:f="http://xmlns.jcp.org/jsf/core" <div class="mb-3"> <h:outputLabel for="passwordInput" value="Password" styleClass="label"/> <h:inputSecret id="passwordInput" value="#{auth.userRegistration.password}" required="true" requiredMessage="Password is required" styleClass="form-control" maxlength="30"> <f:validator validatorId="passwordValidator" /> <f:attribute name="password2" value="#{password2}"/> </h:inputSecret> <h:message for="passwordInput" styleClass="error"/> </div> <div class="mb-3"> <h:outputLabel for="passwordInput2" value="Confirm Password" styleClass="label"/> <h:inputSecret id="passwordInput2" binding="#{password2}" required="true" maxlength="30" requiredMessage="Password are not matched" styleClass="form-control"/> <h:message for="passwordInput2" styleClass="error"/> </div>

回答 3 投票 0

如何通过javascript使用costum过滤器(selectCheckboxMenu)保存和恢复primefaces数据表的过滤器状态?

我有一个 primefaces 数据表,想使用 selectCheckboxMenu 对其进行过滤 我有一个 primefaces 数据表,想使用 selectCheckboxMenu 对其进行过滤 <p:column filterBy="#{entity.category}" headerText="Category" filterMatchMode="in"> <f:facet name="filter"> <p:selectCheckboxMenu label="Category" onchange="PF('datatable').filter()"> <f:selectItems value="#{bean.categoryOptions}"/> </p:selectCheckboxMenu> </f:facet> <h:outputText value="#{entity.category}" /> </p:column> 过滤器本身效果很好。我可以过滤数据表,并且在重新加载站点后也只有过滤后的值。 我的问题是重新加载后数据表的过滤状态消失了。我看到过滤器有效,但我在数据表的标题中没有看到过滤器的值。 带有数据表的表单: <h:form id="form"> <p:dataTable var="entity" value="#{bean.list}" widgetVar="datatable" filterEvent="enter" id="datatable" lazy="true"> <p:ajax event="filter" process=":form:filters" onstart="saveDatatableState()"></p:ajax> ... columns ... </p:dataTable> <h:inputHidden id="filters" value="#{bean.filters}" /> <h:inputHidden id="page" value="#{bean.page}" /> <h:inputHidden id="npages" value="#{bean.npages}" /> <h:inputHidden id="scrollPos" value="#{bean.scrollPos}" /> </form> <script src="js/DataTableFilterStorage.js" /> <script> $(function(){ loadDatatableState(); }); </script> 过滤器值通过 JavaScript 保存和加载。这些方法位于文件 DataTableFilterStorage.js 中: function saveDatatableState(){ var filterNormal = $('form .ui-column-filter').serialize(); var filterCustomText = $('form .ui-column-customfilter .ui-inputfield').serialize() if (filterNormal != "" && filterCustomText != "") { $(fFilter).val(filterNormal + '&' + filterCustomText); } else { $(fFilter).val(filterNormal + filterCustomText); } var page = $('.ui-paginator-page.ui-state-active:first').text(); if(!page) page = 0; var scrollPos = $('body').scrollTop(); if(!scrollPos) scrollPos = 0; $(#page).val(page); $(#npages).val($('#yui-pg0-0-rpp').val()); $(#scrollPos).val(scrollPos); } function loadDatatableState(){ var filters = $(#filters).val().split('&'); if (filters != ""){ for(var i = 0; i < filters.length; i++){ var f = filters[i].split("="); if(f.length != 2 || f[1].length < 1) continue; $('#'+f[0].replace(/%3A/g, '\\:')).val(decodeURIComponent(f[1]).replace('+', ' ')); //For Dropdown-Menues $('#'+f[0].replace(/%3A/g, '\\:') + ' option:selected').val(decodeURIComponent(f[1]).replace('+', ' ')); } } var handler = function(e, xhr, settings) { if($(#page).val().length > 0 && $(#page).val() != 1){ var p = $('a.ui-paginator-page[page='+$(#page).val()+']:first'); if(p.length > 0){ p.attr('id', 'currentPage'); var event = document.createEvent("HTMLEvents"); event.initEvent("click", true, true); document.getElementById('currentPage').dispatchEvent(event); } } $(#form).unbind('ajaxComplete', handler); }; $(#form).ajaxComplete(handler); }; 正常文本字段、下拉菜单(单选选项)和输入掩码中的过滤器值已正确保存和加载,但 selectCheckboxMenu 中的过滤器值却未正确保存和加载。 过滤器未正确保存的原因是$(#filter).val($('form .ui-column-filter').serialize());行。它仅保存类型为“ui-column-filter”的过滤器。 selectCheckboxMenu 中的过滤器的类型为 ui-column-customfilter。我尝试通过将行更改为 $(#filter).val($('form .ui-column-customfilter').serialize()); 来选择值,但它不起作用。 该解决方案必须在 IE 11 下工作。我使用的是 Primefaces 5.2 和 JSF 2.0。 您可以使用自 Primefaces 6.1 以来实施的新 multiViewState 功能 来保持 dataTable 状态。

回答 1 投票 0

更改 selectCheckboxMenu 行为

我有 PrimeFaces 标签 selectCheckboxMenu。 我有 PrimeFaces 标签 selectCheckboxMenu。 <p:selectCheckboxMenu dynamic="true" filter="true" filterMatchMode="startsWith" label="Cities" style="width: 15rem" panelStyle="width: 15rem" scrollHeight="250" value="#{checkboxView.selectedCities}"> <f:selectItems value="#{checkboxView.cities}"/> </p:selectCheckboxMenu> 我正在努力实现这一点: 当我打开此列表时,如果没有选中其他复选框,则仅选中顶部复选框; 当我选中列表中的一个复选框时,顶部的复选框将取消选中; 我认为 js 可以帮助我,我试图在文档中找到一些东西,但找不到。 您期望的结果的第二部分默认按预期工作 iirc。关于前面的内容,如果您希望在打开菜单后选择列表中的第一项(如果我理解正确的话),请使用方法toggleItem()并将其与js函数结合起来。

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.