JavaServer Faces(JSF)是一种模型 - 视图 - 展示器框架,通常用于创建基于HTML表单的Web应用程序。使用标准组件和渲染工具包,可以使用Facelets或JSP标记定义有状态HTML视图,并通过支持bean连接到模型数据和应用程序逻辑。
使用 PrimeFaces 和 OpenPDF 导出 PDF 时出现 NoSuchMethodError
我正在开发一个 JSF 应用程序,使用 PrimeFaces 14.0.3 进行 PDF 导出。 我正在开发一个 JSF 应用程序,使用 PrimeFaces 14.0.3 进行 PDF 导出。 <p:commandButton id="btnPdf" class="m-1 ui-button-info" ajax="false" rendered="true" icon="fas fa-file-pdf" value="Export as PDF"> <p:dataExporter type="pdf" target="tbl" fileName="processional_fees" /> </p:commandButton> 尝试将 DataTable 导出为 PDF 时,遇到以下错误: WARNING: StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception java.lang.NoSuchMethodError: 'com.lowagie.text.pdf.PdfPCell com.lowagie.text.pdf.PdfPTable.addCell(com.lowagie.text.pdf.PdfPCell)' at org.primefaces.component.datatable.export.DataTablePDFExporter.addCell(DataTablePDFExporter.java:165) ... 这是我的 pom.xml 中用于 PDF 处理的相关部分: <dependency> <groupId>com.github.librepdf</groupId> <artifactId>openpdf</artifactId> <version>1.4.1</version> </dependency> 我还根据 PrimeFaces 文档的初步建议尝试使用 openpdf 版本 2.0.3,该文档列出了用于 PDF 导出的 openpdf 1.4.1。但是,两个版本中都存在该错误。 我的环境包括: PrimeFaces 14.0.3 JSF 2.3 Java 11 帕亚拉5 我正在寻找有关如何解决此 NoSuchMethodError 的指导。这是我的问题: 用于 PDF 导出的 openpdf 和 PrimeFaces 14.0.3 是否存在已知的兼容性问题? 我的项目中是否存在其他依赖项会干扰 PDF 生成? PrimeFaces 或 openpdf 中是否需要其他配置才能正确处理 PDF 导出? 任何帮助或见解将不胜感激! 对我来说这个错误很可疑 java.lang.NoSuchMethodError:'com.lowagie.text.pdf.PdfPCell com.lowagie.text.pdf.PdfPTable.addCell(com.lowagie.text.pdf.PdfPCell)' 在 PR837 中:修改了 PdfPTable 添加单元格方法以返回单元格,进行了重大更改,以便在调用 com.lowagie.text.pdf.PdfPCell 时返回 addCell。它与 1.4.x 版本集成。所以它肯定应该存在于 1.4.1 或 1.4.2 中 根据错误,它找不到这样的方法签名。因此,我假设您的设置中的某些内容弄乱了依赖项,并引入了一个没有此重大更改的 com.github.librepdf 版本(可能是 1.3.X 版本) OpenPDF 自述文件下的依赖项说 2.0.x 分支需要 Java 17 或更高版本。 1.4.x 分支需要 Java 11 或更高版本。 1.3.x 分支需要 Java 8 或更高版本。 所以我希望 2.0.3 根本不起作用,因为您为您的环境列出了 Java 11。
我在 primefaces 中使用流式内容并使用媒体标签来显示它。当在查看器中按下下载按钮时,它会下载名为dynamiccontent.properties的文件。有什么办法
Primefaces 本机上传不适用于 PrettyFaces(OCPSoft 重写)
我需要将我的应用程序迁移到 Jakarta EE 10,以下是我当前的配置: JDK 1.8 Primefaces 12.0.x 漂亮面孔 3.3.3 我已经用新的依赖项更新了我的 pom.xml,替换了
迁移到 Jakarta EE 后,Control+单击 Facelets 中的 EL 表达式在 Eclipse 中不起作用
我最近将项目从javax迁移到Jakarta EE v10,jdk 11到17,以及Tomcat 10.1,primefaces v13 在早期的项目中,当我打开 .xhtml 文件,按下 control 并单击任何 java c...
Primefaces 自动完成转换器类似于omnifaces.SelectItemsConverter
我正在使用 primefaces 开发一个网络应用程序。我有一个自动完成字段,它从 pojo 对象获取其值。我想知道是否有类似omnifaces的转换器解决方案。
我有一个 JSF 应用程序,我正在将其转换为使用 Web 服务而不是直接的数据库查询。有一些非常长的列表,以前可以通过简单的...
从 PrimeFaces 8 更新到 10 后,我的应用程序中的所有自动完成组件在打开下拉菜单时均不显示值 该列表仍为空。当我调试到自动完成时......
我正在尝试有条件地渲染 ,因此我无法使用 ,因为它将渲染为 或 我当前的(工作)方法如下: 我正在尝试有条件地渲染 <tr>,因此我无法使用 <h:panelGroup>,因为它将渲染为 <span> or <div> 我目前的(工作)方法如下: <h:outputFormat rendered="#{negotiator.maySend}"> <tr> my tr stuff </tr> </h:outputFormat> 这可行,但我不确定这是否是滥用<h:outputFormat>的方式 - 之前我使用过<h:outputLabel>,但这在IE中呈现为<label>。 我也阅读了这个问题的答案,但如上所述,它们对我不起作用,因为<tr>:如何不在 JSF 中渲染整个块? 我无法使用 <h:panelGroup>,因为它会渲染为 <span> 或 <div> 显然你没有仔细测试。如果您不指定最终应在客户端出现的属性,则 <h:panelGroup> 将不会渲染任何内容,例如 layout、id、styleClass 等。 因此,这在技术上应该可以完美地工作。 <h:panelGroup rendered="#{negotiator.maySend}"> <tr> my tr stuff </tr> </h:panelGroup> 但是,更好的主要目的是使用 <ui:fragment>。 <ui:fragment rendered="#{negotiator.maySend}"> <tr> my tr stuff </tr> </ui:fragment> 顺便说一句,这也可以通过 <f:verbatim> 实现,但自 JSF 2.0 起已弃用,因为它是专门为在 JSP 中使用而设计的。 另请参阅: JSF 中 ui:fragment 的替代品 有条件地显示 JSF 组件 如何找出用于ajax更新/渲染的组件的客户端ID?找不到带有从“bar”引用的表达式“foo”的组件 Ajax 更新/渲染不适用于具有渲染属性的组件 实现此目的的一种方法是将表格行的显示样式设置为无。如果满足你的条件,然后使用javascript将样式设置为table-row。 像这样: <tr id="tableRow" style="display: none;"> my tr stuff </tr> JS: const show = true; // Do some logic here if (show) { document.getElementById("tableRow").style.display = "table-row"; }
如何在 Firefox 上从 Controler 调用 javaScript?
我正在尝试从 bean 调用 JavaScript。脚本工作正常,但是当尝试从 bean 运行它时出现错误: Uncaught ReferenceError: funkcjaKolorujPredkosc is not Defined 导入到xml: &l...
IceFaces 3.3.0 ace:带有图像的按钮。怎么办?
我一直在努力尝试将图像添加到 IceFaces 按钮。 我的最后一次尝试是添加嵌套到按钮标签的图像,如下所示: 我一直在努力尝试将图像添加到 IceFaces 按钮。 我的最后一次尝试是添加嵌套到按钮标签的图像,如下所示: <ace:pushButton actionListener="#{logoutCtrl.logout()}"> <h:graphicImage value="img/logout.png" width="20px" height="20px"/> </ace:pushButton> 但不幸的是它没有起作用。页面显示没有标签的按钮,然后是图像,例如: 我找到了这个链接,他们提到它应该从 2.x 版本开始修复,所以我可能做错了什么。 P.S - 我通常会使用 Prime Faces,但在这种情况下我别无选择。 我遇到了类似的问题,但使用的是 ICEFaces 4。在我的情况下,图像将显示在按钮旁边。我想,我可以在 CSS 中设置按钮的样式。相反,我只是用标准 JSF h:commandButton 组件替换了 ace:pushButton 元素。 h:commandButton 有一个图像属性。这是一个例子: <h:commandButton image="#{resource['images:searchIcon.png']}" action="#{myBean.performSearch}"> <f:param name="callback" value="sessionSearch"/> </h:commandButton> 希望这可以帮助别人。
有时我看到 JSF URL 是 *.jsf,有时是 *.xhtml,有时是 /faces/*。为什么?
一直在尝试学习JSF,有时我看到URL是*.jsf,有时是*.xhtml或/faces/*。有人可以补充我的知识吗?当我使用 Facelet 创建 JSF 时,文件扩展名是 .xh...
我需要复制树中的数据以方便用户使用。由于某种原因无法选择文本。 我需要复制树中的数据以方便用户使用。由于某种原因无法选择文本。 <p:tree id="tree" value="#{valid.value}" var="var" > <p:treeNode collapsedIcon="pi pi-folder"> <p:outputLabel value="#{valid.label}"/> <p:treeNode/> <p:tree/> 我只能在整个树被禁用时选择文本。 我也尝试过设置一些CSS组件,如z-index、指针事件、用户选择、光标等,但似乎没有什么相关的。 我不太清楚 JSF 如何创建这些组件,因为我还是个新手。我很确定禁用状态下发生了一些事情,允许树的渲染执行其他操作。 当您开始从树外部选择时,您可以选择数据,这可能不是您想要的。 我将创建一个按钮,允许用户使用一些 JavaScript 使用 navigator.clipboard.writeText 将文本复制到剪贴板。 请注意,您可以使用 OmniFaces escapeJS 转义要在 EL 中复制的文本。
在 Tomcat 6 上运行的两个 Web 应用程序之间建立 SSO 和会话共享
我有两个 Web 应用程序,webapp1 (JSF-Spring) 和 webapp2 (Struts) 在单个 Tomcat 6.0 上运行。 Webapp1 使用 JSF 阶段侦听器来保护 web 应用程序中的所有资源。 用户之后
集成 JSF 时出现“无法从 jsf-impl-2.0.jar 读取 TLD META-INF/jsf_core.tld”错误
我们有一个Struts+Spring+Hibernate应用程序,我们正在尝试集成JSF。为此,我们在 web.xml 和 struts-config.xml 中做了一些配置。我添加了一些 JAR 文件到 WEB-INF/l...
我对Struts很感兴趣,并且开始学习JSF 2.0。我可以继续使用 Struts 中有效的方法来减少攻击向量,还是有我需要编码的新攻击向量?
当我从@Startup @Singleton bean的@Schedule调用方法时出现NullPointerException
当我尝试从@Startup @Singleton bean调用@ViewScoped Bean的方法时,我总是遇到错误NullPointerException。我使用@Schedule注解方法来调用@ViewScoped bean方法,为什么呢
p:commandButton 操作抛出 javax.el.PropertyNotFoundException
错误在于: javax.el.PropertyNotFoundException:/index.xhtml:在 fya.beanpages.IndexBean 类型上找不到属性“validar” 看起来它没有找到 validar 方法。这...
我的 Facelet 中有以下代码片段: 我的 Facelet 中有以下代码片段: <h:commandLink id="cmdbtn"> <f:ajax event="click" execute="@form" listener="#{screenShotBean.takeScreenshot}" /> </h:commandLink> 它工作得很好,但是当我像这样评论它时, <!-- <h:commandLink id="cmdbtn"> --> <!-- <f:ajax event="click" execute="@form" --> <!-- listener="#{screenShotBean.takeScreenshot}" /> --> <!-- </h:commandLink> --> 然后抛出以下异常: javax.el.PropertyNotFoundException: Property 'takeScreenshot' not found on type monstage.test.com.ScreenShotBean at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:237) at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:214) at javax.el.BeanELResolver.property(BeanELResolver.java:325) at javax.el.BeanELResolver.getValue(BeanELResolver.java:85) at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) at org.apache.el.parser.AstValue.getValue(AstValue.java:169) at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189) at com.sun.faces.facelets.el.ELText$ELTextVariable.toString(ELText.java:217) at com.sun.faces.facelets.el.ELText$ELTextComposite.toString(ELText.java:157) at com.sun.faces.facelets.compiler.CommentInstruction.write(CommentInstruction.java:77) at com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82) at com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:183) at javax.faces.render.Renderer.encodeChildren(Renderer.java:168) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:424) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) 当我如下更改带括号的方法表达式时, <!-- <h:commandLink id="cmdbtn"> --> <!-- <f:ajax event="click" execute="@form" --> <!-- listener="#{screenShotBean.takeScreenshot()}" /> --> <!-- </h:commandLink> --> Then 不会抛出异常,但仍然被调用。 这是怎么造成的,如何解决? 仔细查看堆栈跟踪。这是相关部分: ... org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189) com.sun.faces.facelets.el.ELText$ELTextVariable.toString(ELText.java:217) com.sun.faces.facelets.el.ELText$ELTextComposite.toString(ELText.java:157) com.sun.faces.facelets.compiler.CommentInstruction.write(CommentInstruction.java:77) ... 因此它在注释块中评估 EL(可通过 CommentInstruction 识别)。注释块被视为模板文本。默认情况下,Facelets 也会评估模板文本中的 EL #{}。就像您在编写 <p>#{screenShotBean.takeScreenshot}</p> 时没有任何 JSF 标签一样。 您有多种选择: 完全删除评论块。 通过在注释中添加 \ 前缀来转义 EL 表达式,如 所示 \#{screenShotBean.takeScreenshot} 这样他们就不会被评价。 将整个注释块包裹在 <ui:remove> 中,这样它就不会出现在组件树中(也不会出现在生成的 HTML 输出中)。 通过将以下上下文参数添加到 web.xml 来禁用 Facelets 对 all 注释的解析: <context-param> <param-name>jakarta.faces.FACELETS_SKIP_COMMENTS</param-name> <param-value>true</param-value> </context-param> 请注意,通过这种方式生成的 HTML 输出中不会出现任何评论。 除了 BalusC 已经提供的 选项,您还可以将属性 rendered="false" 添加到您的 commandLink。 如果您希望能够快速切换多个组件,您可能需要考虑在 bean 中创建调试属性或使用项目阶段: rendered="#{facesContext.application.projectStage == 'Development'}" 您还可以使用上下文参数来跳过 web.xml 中的注释。 这是参数: javax.faces.FACELETS_SKIP_COMMENTS
类“packageName.DonacionBean”没有属性“donar” - 未检测到操作方法?
我在使用 EJB 和 JSF 的 Java 项目中遇到了一个问题,这非常令人沮丧。我有一个简单的设置,其中 XHTML 文件调用托管 bean 中定义的方法。 这是我的 .xhtml:...
JSF - 类“packageName.DonacionBean”没有属性“donar” - 未检测到操作方法?
我在使用 EJB 和 JSF 的 Java 项目中遇到了一个问题,这非常令人沮丧。我有一个简单的设置,其中 XHTML 文件调用托管 bean 中定义的方法。 这是我的 .xhtml:...