EL(表达式语言)支持在JSP和Facelets页面中动态解析Java对象和方法。 EL表达式采用$ {foo}和#{bar}的形式。
javax.el.PropertyNotFoundException:类“xxx”没有可读属性“yyy”
我有以下会话范围的 CDI 托管 bean: @命名 @SessionScoped 公共类 RegisterController 实现可序列化 { 私有静态最终长serialVersionUID = 1L; @注入...
我们使用第三方工具,提供请求参数为“A:B”、“A:C”、“A:D”,其中A是服务(工具术语),B、C、D是参数。 如何访问变量...
我有一个dynaform ReservationForm,它是针对预订对象中的一个对象预订,有成员,每个成员中有计费信息对象。 在每个计费对象中...
Scriptlet 和 EL 在 JSP 中呈现为文本(未编译)
我在 JSP 页面中包含标签库和使用表达式语言时遇到问题。 JSP 不希望计算表达式并像简单文本一样返回它们。 例如,如果 JSP 内容 &...
Scriptlet 和 EL 在 JSP 中呈现为文本(未编译)
我在 JSP 页面中包含标签库和使用表达式语言时遇到问题。 JSP 不希望计算表达式并像简单文本一样返回它们。 例如,如果 JSP 内容 &...
如何与 EL 表达式中的 JavaScript 变量进行比较?
在.jsp文件中: 字符串id =“S”; 在 .jsp 文件中: <script> String id = "S"; </script> <c:choose> <c:when test="${detail.status==id}"> </c:when> <c:otherwise> </c:otherwise> </c:choose> JavaScript 和 Java 代码运行在不同的计算机上。您不能同时使用两者。 如果您在服务器上将变量定义到 jsp 中的任何其他范围 request.setAttribute("id", "S"); 然后就可以使用了 <script> String id = ${id}; </script>
<table> <c:if test="${output.list == nul}"> <tr><td><input type="text" /><select></select><input type="text" /> </td> </tr> </c:if> <c:forEach var="iter" items="${output.list}"> <tr><td><input type="text" /><select></select><input type="text" value="${iter.getVal()}" /> </td> </tr> </c:forEach> </tbody> </table> 如果我的${list}为空,如何在不重复代码或不使用JavaScript的情况下显示.clone行? 我不知道我是否理解你的问题。如果你想输出一行包含所有内容,当列表为空时,尝试下一种方法: <table> <c:forEach var="i" begin="0" end="${not empty list?(fn:length(list)-1):0}"> <tr class="clone"> <td> <input type="text" /> <select></select> <input type="text" value="${list[i]!=null?list[i].getVal():''}" /> </td> </tr> </c:forEach> </tbody> 要使用 fn: 命名空间,只需在文件开头添加 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 更新:根据问题更改而更改 如果列表为空,则向列表添加一个空值。您可以在 servlet 或 JSP 中执行此操作,但在 JSP 中您必须编写额外的 java 代码来修改列表。 <table> <c:set var="list" value="${output.list}"/> <c:if test="${empty list && list != null}"> ${list.add(null)} </c:if> <c:forEach var="iter" items="${list}"> <tr><td><input type="text" /><select></select><input type="text" value="${iter.getVal()}" /> </td> </tr> </c:forEach> </tbody> </table>
如何在Java中传递(request,response)等JSP隐式对象。 我想在Java代码中访问JSP隐式对象。 请建议如何实现这一目标? 我的Java代码是: 包测试。这里; 导入...
如何在Java中传递(request,response)等JSP隐式对象。 我想在Java代码中访问JSP隐式对象。 请建议如何实现这一目标? 我的Java代码是: 包测试。这里; 导入...
将displaytag列设置为单选按钮,value属性不会评估Struts 2中的EL表达式
我在获取与单选按钮(表中的一列)关联的值时遇到问题。它没有返回实际的conferenceid,而是返回${conf.conferenceid...
JSP EL 中的 session 和 sessionScope 相同吗?
公共类LoginAction扩展ActionSupport { 私有字符串用户名; 私有字符串密码; @覆盖 公共字符串execute()抛出异常{ ActionContext ct...
java.lang.ClassNotFoundException:jakarta.enterprise.inject.spi.el.ELAwareBeanManager
我目前正在将项目从 Java 11 迁移到 Java 17,从 Spring 5 迁移到 Spring 6,以及从 RichFaces 迁移到 PrimeFaces 14(雅加达)。进行必要的更改后,我遇到以下情况
我有一张受保护的地图>动物;在我的课堂上。在我的构造函数中,我有 Animals.put("狗", new ArrayList()); Animals.put("猫", ...
JSTL foreach 中的 NPE:在 JSTL foreach 中访问子类变量时出现空指针异常
在 JSTL foreach 中访问子类变量时出现空指针异常,即使该变量存在数据也是如此。 我有这样的类结构 - 公开课问题实现
我有一个jsp,里面有这样的东西 ${pageContext.request.parameterMap.instanceNo[0]} 我想迭代它的每个值。 我尝试了下面的代码但不起作用 我有一个jsp,里面有这样的东西 ${pageContext.request.parameterMap.instanceNo[0]} 我想迭代它的每个值。 我尝试了以下代码,但不起作用 <s:iterator id="test" var="" value="${pageContext.request.parameterMap.instanceNo[0]}"> Hello </s:iterator> 由于您已经使用 [0] 表示索引,因此它返回第一个值作为 String,而不是所有值都作为 String[]。 您难道不想迭代 ${paramValues.instanceNo} 吗?
EL 不会被解释,并且在生成的 HTML 输出中显示为普通格式 [重复]
我正在使用Struts1和JSP。我可以使用 标签访问表单属性,但无法使用 JSTL 来访问。为什么不呢?我的表单是 DynaActionForm。 该语句有效: 我正在使用Struts1和JSP。我可以使用 <bean:write> 标签访问表单属性,但无法使用 JSTL 执行此操作。为什么不呢?我的表格是DynaActionForm。 此语句有效: <bean:write name="myForm" property="origin"/> 这不起作用,显示 ${myForm.map.origin} 普通香草: <c:out value="${myForm.map.origin}"/> 这也不起作用,显示 ${myForm.origin} 普通香草: <c:out value="${myForm.origin}"/> 如果某个地方 Servlet/JSP、JSTL 和/或 web.xml 版本不匹配,就会发生这种情况。在 Servlet 2.3/JSP 1.2 期间,EL 是 JSTL 1.0 的一部分。在 Servlet 2.4/JSP 2.0 期间,EL 从 JSTL 移至 JSP,而 JSTL 1.1 则不带 EL。 web.xml 版本声明指示当前使用的 Servlet/JSP 版本,并且目标容器必须支持该版本。 因此,如果您在 Servlet 2.4/JSP 2.0 上使用 JSTL 1.0,或者在 Servlet 2.3/JSP 1.2 上使用 JSTL 1.1,那么您将面临这个问题。另外,如果您在 Servlet 2.4/JSP 2.0 上使用 JSTL 1.1,但 web.xml 声明符合 Servlet 2.3(或不包含任何版本声明),那么您也将面临这个问题。 所有内容都在我们的 JSTL wiki 页面中进行了解释。您还可以在其中找到正确 JSTL 版本的下载链接以及正确版本特定的 web.xml 声明的示例。 另一个可能的原因是 JSP 顶部有 <%@page isElIgnored="true"%> 声明或 <jsp-config><el-ignored>true</el-ignored></jsp-config> 中的 web.xml,但这是一个太明显的原因,不容忽视。
JSP 页面中的 JSTL 标记中的 ${...} 语法可以访问哪些变量?
我有点沮丧,因为我无法找到可以使用放置在 JSP 页面中的 JSTL 标记中的 ${...} 语法访问哪些变量。 作为示例,我有以下代码: 我有点沮丧,因为我无法找到可以使用放置在 JSP 页面中的 JSTL 标记中的 ${...} 语法访问哪些变量。 作为示例,我有以下代码: <c:set target="${status.menue}" property="activeMenuePath" value="whatever" /> 必须在哪里定义对象 "status.menue" 才能使用美元符号和大括号进行访问。它是在另一个 struts 磁贴中还是在表单中定义的? 它应该分别使用 JspContext#setAttribute()、ServletRequest#setAttribute()、HttpSession#setAttribute() 或 ServletContext#setAttribute() 放置在任何页面、请求、会话或应用程序范围中。通常,您可以在 Servlet 内直接或间接地执行此操作。 MVC 框架间接地做到这一点,通常可以通过为模型对象提供“请求”、“会话”或“应用程序”范围来配置。 表达式语言 (EL) 将使用 JspContext#findAttribute()访问它们。 顺便说一句,这一切都与 Struts 无关。它只是一个构建在 JSP/Servlet API 之上的遗留 MVC 框架。 <c:set> 也不是 Struts 标签,它是 JSTL 标签。
我的 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
在我的servlet中: request.setAttribute("列表", myList); 在我的 JSP 中: ${item.name} 和 ${item.address} 哈...