facelets 相关问题

Facelets是JavaServer Faces框架的基于XML的视图技术。您不需要在Facelets被“巧合地”用作视图技术的每个JSF问题上使用此标记。仅在您对Facelets自己的<ui:xxx>标记有特定问题时才使用此标记。

测试模板客户端中是否已定义 ui:insert

我想知道是否可以知道 ui:insert 是否在 ui:composition 中定义。 我知道我可以使用单独的 ui:param 来做到这一点,但只是想不这样做以保持简单......

回答 1 投票 0

我可以向使用模板的特定页面添加元标记吗

我有一个使用模板的页面 我希望仅使用...

回答 1 投票 0

如何编译facelets?

很多次我都遇到这样的错误: -标签未关闭(xml错误) -xhtml 有重复的 id 我想编写验证器来检查文件中是否存在这些错误。我打赌有一些 Facelets 编译器可以实现

回答 3 投票 0

有时我看到 JSF URL 是 *.jsf,有时是 *.xhtml,有时是 /faces/*。为什么?

一直在尝试学习JSF,有时我看到URL是*.jsf,有时是*.xhtml或/faces/*。有人可以补充我的知识吗?当我使用 Facelet 创建 JSF 时,文件扩展名是 .xh...

回答 2 投票 0

注释掉的 Facelets 代码仍然调用 #{bean.action()} 等 EL 表达式,并导致 #{bean.action} 上出现 javax.el.PropertyNotFoundException

我的 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

回答 3 投票 0

如何在 JavaScript 中触发隐藏的 JSF commandLink?

我在此线程上有一个类似的问题,其中我有一个 JavaScript 函数,它将触发隐藏的 commandLink 的单击事件。隐藏命令将触发 Java Bean 中的操作。这...

回答 2 投票 0

JSF 2.2 表单提交,重新加载页面=重新提交?

所以我有一个 JSF 应用程序。如果我提交表单,当我刷新页面时它会重新提交。我当然不希望这样。 索引.xhtml: [...] 所以我有一个 JSF 应用程序。如果我提交表单,当我刷新页面时它会重新提交。当然我不想要这样。 索引.xhtml: [...] <h:form > <h:outputText value="Form"/><br/> <h:inputText label="first" value="#{example.newExample.firstWord}" autocomplete="off"></h:inputText> <h:commandButton value="click" actionListener="#{example.NewExample()}"> </h:commandButton> </h:form> [...] 运行的方法: public void NewExample(){ pfDB.InsertNewExample(NewExample); NewExample.setFirstWord(null); NewExample.setSecondWord(null); } 所以每次我提交表单后刷新index.xhtml,NewExample()就会运行。 问题确实出在重新提交表格上。但浏览器(opera)没有显示警报。 我通过添加修复了它 FacesContext.getCurrentInstance().getExternalContext().redirect("index.xhtml"); 在我的职能中 尝试通过ajax提交: <h:commandButton value="click" actionListener="#{example.NewExample()}"> <f:ajax /> </h:commandButton> 您可能需要渲染一些组件。

回答 2 投票 0

jakarta ee - servlet 的导航案例

Web 应用程序中有两个页面 page1 和 page2。 页面 page1 是基于 .xhtml 文件的 Facelet,而 page2 由 servlet 生成。 我们假设 page1.xhtml 如下所示: Web 应用程序中有两个页面 page1 和 page2。 页面 page1 是基于 .xhtml 文件的 Facelet,page2 由 servlet 生成。 我们假设 page1.xhtml 看起来像这样: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="jakarta.faces.html" xmlns:f="jakarta.faces.core" > <h:head> <title>TODO supply a title</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> </h:head> <h:body> <h:button outcome="yolo" value="move on"/> </h:body> </html> 为了简单起见,让 page2 从以下 servlet 生成: package tests; import jakarta.inject.Inject; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(urlPatterns = "/abc") public class StorageSrv extends HttpServlet { @Inject private Storage storage; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("abc"); } } 我还在faces-config.xml中添加了导航规则,如下: <navigation-rule> <from-view-id> /flexible.xhtml </from-view-id> <navigation-case> <from-outcome> yolo </from-outcome> <to-view-id> /abc </to-view-id> </navigation-case> </navigation-rule> 如何从 page1 重定向到 page2 ? 目前,导航规则添加了 .xhtml 扩展名,因此通过单击 page1 上的“继续”按钮,我得到 404。 显然,只需将 servlet 映射到带有 .xhtml 扩展名的路径即可完成这项工作。 例如: @WebServlet(urlPatterns = "/abc.xhtml")

回答 1 投票 0

错误解析/page.xhtml:错误跟踪[行:42]实体“nbsp”被引用,但未声明

我想在 JSF 页面中使用不间断空格。我知道,在纯 HTML 中,我可以使用 来实现此目的,并且效果很好。但是,当我将这些放入 Facelets 页面时,就会出错...

回答 5 投票 0

1 字节 UTF-8 序列的第 1 字节无效

我有一个 MyFaces Facelets 应用程序,其中页面编码有点粗糙。不管怎样,它是用 Eclipse 开发的,用 Ant 构建的,在 Tomcat 2.0.26 中运行得很好。到目前为止,一切都很好。 现在,我会...

回答 4 投票 0

Jakarta EE:JSF 标签未转换为 HTML 标签

我已经在 IntelliJ Idea Ultimate (Maven) 中为 Java Enterprises 的大学项目设置了 Jakarta EE 项目,并且还可以在浏览器中输出 index.xhtml(通过 Tomcat 8.5.87)。我是另一个...

回答 1 投票 0

如何从 p:panel 内容中删除填充

我有一个 id 为 X 的 ,我想从其内容 X_content 中删除填充,为面板内容生成的 HTML 是: 我有一个 <p:panel>,id 为 X,我想从其内容中删除填充 X_content 为面板内容生成的 HTML 是: <div id="X_content" class="ui-panel-content ui-widget-content"> 并且该元素出现在 chrome 开发者工具中以具有填充: padding:0.5em 1em; 我制作了一个嵌入式样式表来覆盖 primefaces 中的样式表,如下所示: <h:head> <style> .ui-panel-content, .ui-widget-content{ padding:0px; } </style> </h:head> 但是我没有工作,填充仍然存在,有人可以帮助我吗? 您的 CSS 选择器 .ui-panel-content, .ui-widget-content { ... } 基本上意味着:“选择具有 ui-panel-content 或 ui-widget-content 类的所有元素”。 但是,填充是通过此 CSS 选择器在 PrimeFaces 默认 CSS 中定义的 .ui-panel .ui-panel-content { ... } 基本上意味着 “选择具有 ui-panel-content 类的所有元素,该类是具有 ui-panel 类的元素的子元素”,这是根据 CSS 级联规则 更强的选择器。因此,它的优先级高于 CSS 选择器。这与样式类的声明顺序无关(仅当选择器具有相同强度时声明顺序才重要)。 当覆盖 PrimeFaces 默认 CSS 时,您应该提供一个“至少”相同强度或更强的选择器。在您的特定情况下,如果您打算全局应用样式,只需使用相同的选择器: .ui-panel .ui-panel-content { padding: 0; } 请注意,当在 <style> 中使用 <h:head> 时,它仍然会被 PrimeFaces 默认 CSS 覆盖,因为它会自动包含在头部末尾。而是将 <style> 移至 <h:body>,或者更好的是,将其放入自己的 CSS 文件中,通过 <h:houtputStylesheet> 将其包含在 <h:body> 内。 另请参阅: 如何使用自定义样式覆盖默认的 PrimeFaces CSS? CSS 选择器语法 我无法真正理解这里的答案,它对我不起作用。 但这有效。 :host { &::ng-deep { .p-panel-content { padding: 0; } } }

回答 2 投票 0

如何删除 Facelets 中的 HTML 注释?

我想在交付给最终用户之前从我的 Facelet 中删除所有 HTML 注释。是否存在任何标准方法?

回答 2 投票 0

JSF 和 Facelets 文件自动重新加载

我在使用 JRebel、Spring、JSF Mojarra 2.0.3 和 WebLogic 10.3 热重载 Facelets 文件时遇到了一些问题。 JRebel 成功重新加载 /WebContent 下的常规 Java 类和 js/css 文件,...

回答 2 投票 0

包含包含来自流的 JSF 标签/组件的动态内容

我正在开发一个应用程序,我想在其中包含来自流的动态 XHTML 内容。为了处理这个问题,我编写了一个标记处理程序扩展,它将动态 XHTML 内容转储到输出组合...

回答 2 投票 0

为什么 <ui:fragment rendered> 没有对 <h:outputStylesheet> 和 <h:outputScript>

我有一个 JSF 2 主模板,如下所示: 我有一个 JSF 2 主模板,如下: <!DOCTYPE html> <html lang="#{localeManager.language}" xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> <f:view locale="#{localeManager.locale}"> <h:head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title><ui:insert name="title">Default Title.</ui:insert></title> <!-- Development Stylesheets --> <ui:fragment rendered="#{facesContext.application.projectStage eq 'Development'}"> <h:outputStylesheet name="css/bootstrap.css" library="bootstrap" /> <h:outputStylesheet name="css/font-awesome.css" library="fontawesome" /> </ui:fragment> <h:outputStylesheet name="css/main.css" library="core" /> <ui:insert name="header-stylesheet" /> <!-- Production Stylesheets --> <ui:fragment rendered="#{facesContext.application.projectStage eq 'Production'}"> <h:outputStylesheet name="css/bootstrap.min.css" library="bootstrap" /> <h:outputStylesheet name="css/font-awesome.min.css" library="fontawesome" /> </ui:fragment> <ui:insert name="header-script" /> </h:head> <h:body> <div id="wrapper"> <div id="header"> <ui:insert name="header">Default content</ui:insert> </div> <div id="body"> <ui:insert name="body">Default body</ui:insert> </div> <div id="footer"> <ui:insert name="footer">Default footer</ui:insert> </div> </div> <!-- Development Scripts --> <ui:fragment rendered="#{facesContext.application.projectStage eq 'Development'}"> <h:outputScript name="jquery-2.1.4.js" library="jquery" /> <h:outputScript name="js/bootstrap.js" library="bootstrap" /> </ui:fragment> <!-- Production Scripts --> <ui:fragment rendered="#{facesContext.application.projectStage eq 'Production'}"> <h:outputScript name="jquery-2.1.4.min.js" library="jquery" /> <h:outputScript name="js/bootstrap.min.js" library="bootstrap" /> </ui:fragment> <ui:insert name="body-script" /> </h:body> </f:view> </html> 在 Wildfly 9.0.1 Final 中部署它时,我看到我的所有 <ui:fragment> 属性都被渲染了。这是为什么?我正在使用 JSF 2.2 框架进行开发。 My Faces 项目阶段是 Development。 注意: 在SO中关于这个问题的所有答案中,没有一个是这个问题的解决方案(所以我做了我的作业)。 <h:outputStylesheet>和<h:outputScript>是特殊组件。他们将在视图构建期间通过 UIViewRoot#addComponentResource() 将声明的样式表或脚本资源添加到视图中(请参阅此处的 Mojarra 源代码)。 这与组件或其父组件的 rendered 条件无关。实际上,它们基本上被重新定位到 <h:head> 或 <h:body> 的最末端,具体取决于 target 属性的值,导致它们不再位于 <ui:fragment> 内部。 然后,在渲染过程中,仅考虑它们自己的 rendered 属性(实际上也考虑 <h:head> 的属性,但这毫无意义)。 您有 2 个选择: 使用视图构建时间标签有条件地将它们添加到视图中。项目阶段条件无论如何都是应用范围内的。 <!-- Development Stylesheets --> <c:if test="#{facesContext.application.projectStage eq 'Development'}"> <h:outputStylesheet ... /> <h:outputStylesheet ... /> </c:if> <!-- Production Stylesheets --> <c:if test="#{facesContext.application.projectStage eq 'Production'}"> <h:outputStylesheet ... /> <h:outputStylesheet ... /> </c:if> 检查组件资源自身的rendered属性中的条件。如有必要,请使用 <c:set> 创建一个短 EL 变量。 <c:set var="dev" value="#{facesContext.application.projectStage eq 'Development'}" scope="application" /> <!-- Development Stylesheets --> <h:outputStylesheet ... rendered="#{dev}" /> <h:outputStylesheet ... rendered="#{dev}" /> <!-- Production Stylesheets --> <h:outputStylesheet ... rendered="#{not dev}" /> <h:outputStylesheet ... rendered="#{not dev}" /> 另请参阅: JSF2 Facelets 中的 JSTL...有意义吗?

回答 1 投票 0

通过 ui:param 将数组列表发送到 JSF ui:composition 模板

我知道我可以使用 ui:param 从基于模板构建的组合中传递字符串 像这样:http://www.mkyong.com/jsf2/how-to-pass-parameters-to-jsf-2-0-template-file/ 然后我就可以使用参数了...

回答 1 投票 0

加载页面时如何获取硬编码值(viewAcrion)?

加载页面时如何获取硬编码值? actionCode f:param 总是返回空值。 如何在页面加载时获取硬编码值? actionCode f:param 总是返回空值。 <f:viewAction action="#{myFaces.onLoad}"> <f:param name="actionCode" value="123" /> </f:viewAction> public void onLoad() { // Unable to get actionCode, always return empty logger.debug("FacesRequestParameterMap: {}", FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()); }

回答 0 投票 0

实体名称必须紧跟在实体引用中的"& "之后。

我想在我的*.xhtml页面上放一个packman游戏。(我使用jsf 2和primefaces 3.5)然而,当我在xhtml中 "翻译 "html页面时,我在这个脚本中得到一个错误。 var ...</root>

回答 6 投票 82

如何通过<ui:param>的<ui:include&gt来传递bean actionlistener方法。

我使用的是 来加载一个数据表(我使用Primefaces)。我想使用

回答 1 投票 4

© www.soinside.com 2019 - 2024. All rights reserved.