jstl 相关问题

JSTL(JSP标准标记库)是一个基于JSP的标准标记库,它提供标记来控制JSP页面中的流,日期/数字格式和国际化设施以及几个实用程序EL函数。

怎么写<c:if> - jstl标签-比较map key与struts formbean元素

我需要根据条件从 JSP 中的 Map>> 类型的映射中检索列表值。条件是将映射键与 formbean 变量进行比较。

回答 1 投票 0

如何从资源包中获取字符串并在JSP中保存为变量

我正在将旧的 Struts 1.x 应用程序转换为 Spring MVC,在某些 JSP 页面中,bean:define 标记用于从资源包中获取字符串,然后在稍后使用。 ..

回答 2 投票 0

相当于Struts 1.x“bean:define”标签?

我正在将旧的 Struts 1.x 应用程序转换为 Spring MVC,在某些 JSP 页面中,bean:define 标记用于从资源包中获取字符串,然后在稍后使用。 ..

回答 2 投票 0

<fmt:formatNumber in jstl need to $ symbol

在我们的struts应用程序中,我们一直在使用有很多地方可以显示货币。默认情况下,标签采用浏览器设置并显示货币符号。如果语言环境是“en_US”那么...

回答 3 投票 0

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,但这是一个太明显的原因,不容忽视。

回答 1 投票 0

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 标签。

回答 1 投票 0

JDK 17迁移后JSP内容不可见

低于警告 警告 [org.springframework.web.servlet.PageNotFound](默认任务 4)没有 POST /VisitVerification/allmodal.ac 的映射 警告 [org.springframework.web.servlet.PageNotFound] (

回答 1 投票 0

如何将 JSTL 添加到运行 GlassFish 的 Jakarta EE 10 项目 [重复]

首先,抱歉我的英语不好。 我开始学习 jakarta EE,并发现了用于防止 XSS 攻击的 Jakarta 标准标签库(JSTL)。 IDE 说:“无法解析 taglib uri” 我会...

回答 2 投票 0

如何将 JSTL 添加到运行 GlassFish 的 IntelliJ Jakarta EE 10 项目

首先,抱歉我的英语不好。 我开始学习 jakarta EE,并发现了用于防止 XSS 攻击的 Jakarta 标准标签库(JSTL)。 IDE 说:“无法解析 taglib uri” 我会...

回答 2 投票 0

c:forEach.items 被重复调用

环境:Seam、Richfaces 以下代码片段导致 getUsers 方法被多次调用,如何在我的应用程序中避免这种情况,以便仅调用一次。 环境:Seam、Richfaces 以下代码片段导致 getUsers 方法被多次调用,我如何在我的应用程序中避免这种情况,以便只调用一次。 <c:forEach items="#{userHome.getUsers()}" var="_user"> </c:forEach> 经验法则是在使用 JSF 时避免使用 <c: 标签(除非您确定它们按预期工作) 这里你最好替换成: <a4j:repeat value="#{userHome.users}" var ="_user"> </a4j:repeat> (或 <ui:repeat>,如果使用 Facelets) PS:我猜getUsers()是JBoss的EL扩展,但我建议除非确实需要,否则不要使用它的扩展功能。 看在上帝的份上,如果您关心性能避免使用 EntityHome/Query 框架。只需在您的 getResultList() 上放置一个断点或输出,然后查看它被调用了多少次。现在尝试使用普通接缝组件进行相同的思考。你会看到显着的变化(!)

回答 2 投票 0

如何使用 c:out 标签以某种格式显示日期

我正在使用JSTL。我想使用 标签在 JSP 中显示日期。 我试过了。 但它显示为 我正在使用JSTL。我想使用 <c:out ..> 标签在 JSP 中显示日期。 我尝试过<c:out value = "<fmt:formatdate value = '${datevar}'"/>。 但它在 HTML 中显示为 <fmt:formatdate value = '${datevar}'。 需要更改什么才能以预期格式显示日期? 您不需要 <c:out>,标签实际上称为 <fmt:formatDate>(注意大写 D)。 <fmt:formatDate value="${datevar}" pattern="MM/yyyy" /> 如果您确实想将其存储在某个变量中以便稍后在 <c:out> 中重新显示,则使用 var 属性。 <fmt:formatDate value="${datevar}" pattern="MM/yyyy" var="newdatevar" /> ... <c:out value="${newdatevar}" /> 你可以试试这个 让我知道它是否对你有用。 再见。

回答 2 投票 0

JSTL forEach 行为不当

问题定义:JSTL 标记在我的 JSP 中工作,但 forEach 除外。行为是它忽略请求对象。它适用于在页面上创建的对象,但适用于来自 req 的对象...

回答 1 投票 0

表格单元格中的下拉列表取决于表格列的名称 表单元格中的下拉列表取决于表列的名称...</desc> <question vote="1"> <p>我有一个 *.jsp 文件。</p> <pre><code><!DOCTYPE html> <html lang="en"> <html> <head> <title> Drop Down List in Table Cell Depending on Name of Table Column </title> </head> <body> <table id="Sample Table" border="1"> <tr> <c:forEach var="element" items="${requestScope.tableColumnNames}"> <th>${element}</th> </c:forEach> </tr> <c:forEach var="elements" items="${requestScope.tableRowValues}"> <tr> <c:forEach var="element" items="${elements}"> <td>${element}</td> </c:forEach> </tr> </c:forEach> </table> </body> </html> </code></pre> <p>参数tableColumnNames是一个数组: String[] tableColumnNames = new String[]{"表列一","表列二"};</p> <p>参数tableRowValues是一个数组: String[][] tableRowValues = new String[][]{{"样本值", "是/否"}};</p> <p>我只想将第二列的列名称为“表列二”的数据显示在下拉列表中。</p> <p>我的假设是从每个单元格获取对列的引用,然后使用 if 条件:</p> <pre><code><c:forEach var="element" items="${elements}"> <td>${element} <c:if <reference from cell to column (name)>="Table Column Two"> <select> <option value="optionYes"> Yes </option> <option value="OptionNo"> No </option> </select> </c:if> </td> </c:forEach> </code></pre> <p>我不确定这个方法是否正确。 请指教。非常感谢您的帮助。</p> </question> <answer tick="false" vote="0"> <p>睡一晚思考一下,然后奇迹就会发生。</p> <p>我找到了以下解决方案:</p> <pre><code><c:forEach var="element" items="${elements}" varStatus="loop"> <td> <c:choose> <c:when test="${requestScope.tableColumnNames[loop.index] == 'Table Column Two'}"> <select> <option value="optionYes"> Yes </option> <option value="OptionNo"> No </option> <option value="" selected disabled hidden> ${element} </option> </select> </c:when> <c:otherwise> ${element} </c:otherwise> </c:choose> </td> </c:forEach> </code></pre> <p>根据需要,在名称为“表列二”的列中,数据显示在下拉列表中。</p> </answer> </body></html>

我有一个 *.jsp 文件。 表单元格中的下拉列表取决于表列的名称...</desc> <question vote="1"> <p>我有一个 *.jsp 文件。</p> <pre><code><!DOCTYPE html> <html lang="en"> <html> <head> <title> Drop Down List in Table Cell Depending on Name of Table Column </title> </head> <body> <table id="Sample Table" border="1"> <tr> <c:forEach var="element" items="${requestScope.tableColumnNames}"> <th>${element}</th> </c:forEach> </tr> <c:forEach var="elements" items="${requestScope.tableRowValues}"> <tr> <c:forEach var="element" items="${elements}"> <td>${element}</td> </c:forEach> </tr> </c:forEach> </table> </body> </html> </code></pre> <p>参数tableColumnNames是一个数组: String[] tableColumnNames = new String[]{"表列一","表列二"};</p> <p>参数tableRowValues是一个数组: String[][] tableRowValues = new String[][]{{"样本值", "是/否"}};</p> <p>我只想将第二列的列名称为“表列二”的数据显示在下拉列表中。</p> <p>我的假设是从每个单元格获取对列的引用,然后使用 if 条件:</p> <pre><code><c:forEach var="element" items="${elements}"> <td>${element} <c:if <reference from cell to column (name)>="Table Column Two"> <select> <option value="optionYes"> Yes </option> <option value="OptionNo"> No </option> </select> </c:if> </td> </c:forEach> </code></pre> <p>我不确定这个方法是否正确。 请指教。非常感谢您的帮助。</p> </question> <answer tick="false" vote="0"> <p>睡一晚思考一下,然后奇迹就会发生。</p> <p>我找到了以下解决方案:</p> <pre><code><c:forEach var="element" items="${elements}" varStatus="loop"> <td> <c:choose> <c:when test="${requestScope.tableColumnNames[loop.index] == 'Table Column Two'}"> <select> <option value="optionYes"> Yes </option> <option value="OptionNo"> No </option> <option value="" selected disabled hidden> ${element} </option> </select> </c:when> <c:otherwise> ${element} </c:otherwise> </c:choose> </td> </c:forEach> </code></pre> <p>根据需要,在名称为“表列二”的列中,数据显示在下拉列表中。</p> </answer> </body></html>

回答 0 投票 0

Struts:对于每个循环

我正在尝试在 Select 标签中使用 foreach 循环。 我正在尝试在 foreach 标签中使用 Select 循环。 <html:select property="year" > <s:iterator var="i" begin="${1}" end="${monthlyChargeForm.currentYear - 2000}" > <s:set var="counter" value="${monthlyChargeForm.currentYear}"/> <html:option value="${counter}"> <c:out value="${counter}"/> </html:option> <s:set var="counter" value="${counter-1}"/> </s:iterator> </html:select> 我试图在下拉列表中列出从当年到 YEAR : 2000 的所有年份。 但我的下拉列表是空的。 Action 类代码:我用过 // monthlyChargeForm.setCurrentYear(now.get(Calendar.YEAR) ); 获取当前年份。 public class MonthlyChargeAction extends Action { private ActionMessages messages; public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { ServletContext context = getServlet().getServletContext(); BACUtils bacUtils = new BACUtils(); String sessionStatus = HtmlBean.isSessionOut(request.getSession(false), context); if(!Constants.SUCCESS_STATUS.equals(sessionStatus)) { return mapping.findForward("sessionOut"); } String accesssStatus = HtmlBean.isSessionValid(request.getSession(false), context, Properties.ACCESS_PROFILE[8][0]); if(!Constants.SUCCESS_STATUS.equals(accesssStatus)) { return mapping.findForward("sessionOut"); } MonthlyChargeForm monthlyChargeForm = (MonthlyChargeForm)form; Reports reports = new Reports(); String sUser =(String) request.getSession().getAttribute("USERID"); String returnVal = ""; int i = 0; try { monthlyChargeForm.setFromDate(bacUtils.getDate()); monthlyChargeForm.setToDate(bacUtils.getDate()); Calendar now = Calendar.getInstance(); String fromDate = monthlyChargeForm.getFromDate(); String toDate = monthlyChargeForm.getToDate(); String curentDate = bacUtils.getDate(); monthlyChargeForm.setCurrentYear(now.get(Calendar.YEAR) ); System.out.println("Current Year :::::::::" + monthlyChargeForm.getCurrentYear()); AuditTrial.insertLog(5,sUser,null,"General Reports Module Loaded Successfully",(String) request.getSession().getAttribute("OPER_TYPE"),"S",request.getRemoteAddr(),context); if(monthlyChargeForm.getPageIndex() == null || monthlyChargeForm.getPageIndex().trim().length() == 0) monthlyChargeForm.setPageIndex(Integer.toString(BACUtils.getIntVal( monthlyChargeForm.getPageIndex()))); if(monthlyChargeForm.getMonth()!=null && monthlyChargeForm.getYear()!=null ) { monthlyChargeForm.setMonthlyChargeReport( reports.getMonthlyChargeData(monthlyChargeForm, 10, context)); } } catch (Exception e) { e.printStackTrace(); } System.out.println(Constants.SUCCESS_MAPPING); return mapping.findForward(Constants.SUCCESS_MAPPING); } 如果您尝试使用 foreach 循环,那么您可以尝试 JSTL 核心标签库中的 forEach 标签。 <%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html:select property="year" > <c:forEach varStatus="i" begin="${monthlyChargeForm.currentYear}" end="2000" step="-1"> <html:option value="${i.index}"> <c:out value="${i.index}"/> </html:option> </c:forEach> </html:select>

回答 1 投票 0

html:option 中的 JSTL 对象

我想创建一个包含 00 到 59 之间数字的保管箱。 在网页上,它工作正常,它的显示方式就像我想要的那样,但是当我通过 getMinutes() 从表单获取分钟元素时,我得到

回答 1 投票 0

如何在 Thymeleaf 中执行 if-else 操作?

在 Thymeleaf 中执行简单的 if-else 的最佳方法是什么? 我想在 Thymeleaf 中实现相同的效果 在 Thymeleaf 中执行简单的 if-else 的最佳方法是什么? 我想在 Thymeleaf 中实现与相同的效果 <c:choose> <c:when test="${potentially_complex_expression}"> <h2>Hello!</h2> </c:when> <c:otherwise> <span class="xxx">Something else</span> </c:otherwise> </c:choose> 在 JSTL。 到目前为止我所想到的: <div th:with="condition=${potentially_complex_expression}" th:remove="tag"> <h2 th:if="${condition}">Hello!</h2> <span th:unless="${condition}" class="xxx">Something else</span> </div> 我不想评估potentially_complex_expression两次。这就是为什么我引入局部变量condition。但我还是不喜欢同时使用 th:if="${condition} 和 th:unless="${condition}"。 重要的是我使用了两个不同的 HTML 标签:比如说 h2 和 span。 你能建议一个更好的方法来实现它吗? Thymeleaf 具有相当于 <c:choose> 和 <c:when> 的功能:Thymeleaf 2.0 中引入了 th:switch 和 th:case 属性。 它们按照您的预期工作,使用 * 作为默认情况: <div th:switch="${user.role}"> <p th:case="'admin'">User is an administrator</p> <p th:case="#{roles.manager}">User is a manager</p> <p th:case="*">User is some other thing</p> </div> 请参阅 this 以获取语法的快速说明(或 Thymeleaf 教程)。 免责声明:根据 StackOverflow 规则的要求,我是 Thymeleaf 的作者。 我尝试使用此代码来查明客户是否已登录或匿名。我确实使用了 th:if 和 th:unless 条件表达式。非常简单的方法来做到这一点。 <!-- IF CUSTOMER IS ANONYMOUS --> <div th:if="${customer.anonymous}"> <div>Welcome, Guest</div> </div> <!-- ELSE --> <div th:unless="${customer.anonymous}"> <div th:text=" 'Hi,' + ${customer.name}">Hi, User</div> </div> 除了 Daniel Fernández 之外,我还想分享我与安全相关的示例。 <div th:switch="${#authentication}? ${#authorization.expression('isAuthenticated()')} : ${false}"> <span th:case="${false}">User is not logged in</span> <span th:case="${true}">Logged in user</span> <span th:case="*">Should never happen, but who knows...</span> </div> 这里是混合了“身份验证”和“授权”实用程序对象的复杂表达式,它为 thymeleaf 模板代码生成“真/假”结果。 “身份验证”和“授权”实用程序对象来自 thymeleaf extras springsecurity3 库。 当 'authentication' 对象不可用或授权.expression('isAuthenticated()') 计算结果为 'false' 时,表达式返回 ${false},否则返回 ${true}。 你可以使用 If-then-else: (if) ? (then) : (else) 示例: 'User is of type ' + (${user.isAdmin()} ? 'Administrator' : (${user.type} ?: 'Unknown')) 对于提出同样问题的新人来说可能很有用。 另一种解决方案 - 您可以使用局部变量: <div th:with="expr_result = ${potentially_complex_expression}"> <div th:if="${expr_result}"> <h2>Hello!</h2> </div> <div th:unless="${expr_result}"> <span class="xxx">Something else</span> </div> </div> 有关局部变量的更多信息: http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#local-variables 在更简单的情况下(当html标签相同时): <h2 th:text="${potentially_complex_expression} ? 'Hello' : 'Something else'">/h2> 使用 th:switch 作为 if-else <span th:switch="${isThisTrue}"> <i th:case="true" class="fas fa-check green-text"></i> <i th:case="false" class="fas fa-times red-text"></i> </span> 使用 th:switch 作为 switch <span th:switch="${fruit}"> <i th:case="Apple" class="fas fa-check red-text"></i> <i th:case="Orange" class="fas fa-times orange-text"></i> <i th:case="*" class="fas fa-times yellow-text"></i> </span> 另一种解决方案是使用 not 得到相反的否定: <h2 th:if="${potentially_complex_expression}">Hello!</h2> <span class="xxx" th:if="${not potentially_complex_expression}">Something else</span> 正如文档中所解释的,这与使用th:unless是一样的。正如其他答案所解释的: 此外,th:if有一个逆属性,th:unless,我们可以有 在前面的示例中使用 而不是使用不在 OGNL 内部 表情 使用 not 也可以,但恕我直言,使用 th:unless 比用 not 否定条件更具可读性。 <div th:switch="true"> <div th:case="${condition}=='1'">answer1...</div> <div th:case="${condition}=='2'">answer2...</div> <div th:case="*">answer3...</div> </div> <div th:switch="${user.role}"> <p th:case="'admin'">User is an administrator</p> <p th:case="#{roles.manager}">User is a manager</p> <p th:case="*">User is some other thing</p> </div> <div th:with="condition=${potentially_complex_expression}" th:remove="tag"> <h2 th:if="${condition}">Hello!</h2> <span th:unless="${condition}" class="xxx">Something else</span> </div> <div style="width:100%"> <span th:each="i : ${#numbers.sequence(1, 3)}"> <span th:if="${i == curpage}"> <a href="/listEmployee/${i}" class="btn btn-success custom-width" th:text="${i}"></a </span> <span th:unless="${i == curpage}"> <a href="/listEmployee/${i}" class="btn btn-danger custom-width" th:text="${i}"></a> </span> </span> </div> 在此输入图片描述 If-then-else 有 2 种变体。 第一: <form method="get" th:action="@{/{id}(id=${user.isAdmin()}?'admin':'user')}"> <input type="submit" value="to Main"/> </form> 第二: <th:block th:if!="${branchMessages.isEmpty()}"> ... </th:block> <th:block th:unless="${branchMessages.isEmpty()}"> ... </th:block> 当我想根据用户的性别显示照片时,这对我有用: <img th:src="${generou}=='Femenino' ? @{/images/user_mujer.jpg}: @{/images/user.jpg}" alt="AdminLTE Logo" class="brand-image img-circle elevation-3"> 当使用 2 个独立的块时,If 和 except 有时无法提供预期结果。 If 和 else 也可以通过在第一个块中使用 if 语句来实现条件 1 (TRUE),第二个 if 语句是第一个条件失败时的第二个块中的替代选择 (FALSE)。 希望这会有所帮助。 <div th:with="condition=${potentially_complex_expression}" th:remove="tag"> //True <h2 th:if="${if_condition}">Hello!</h2> //False <h2 th:if="${alternative_for_false}">Something else</h2> </div> 如何在 Thymeleaf 中执行 if-else 操作? 上面的问题可以通过使用 th:if 和 th:unless 条件概念来解决。 有时,您需要模板的片段仅在满足特定条件时才出现在结果中。 例如,您希望在导航面板上根据登录用户角色显示菜单选项。 例如,管理员用户将有不同的菜单选项,简单用户将有不同的菜单选项。 其语法如下。 <div th:if="${condition}"> <p>True condition related code.</p> </div> <div th:unless="${condition}"> <p>False condition related code</p> </div> 您可以从此资源探索更多内容。 如果喜欢请订阅频道。

回答 15 投票 0

java.lang.ClassNotFoundException:javax.servlet.jsp.tagext.BodyTagSupport

我在 JSP 文件中包含以下标签代码,该代码包含在顶部的所有 JSP 文件中: <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%&g...

回答 1 投票 0

如何转义 JSP/JSTL 中的值? (已解决)

这是我的 jsp 文件之一中的字段之一: 这是我的 jsp 文件之一中的字段之一: <input class="form-input" id="login" type="text" name="login" <c:choose> <c:when test="${action == 'edit' && userToEdit != null}">value="${userToEdit.login}"</c:when> <c:when test="${userFromForm != null}">value="${userFromForm.login}"</c:when> <c:otherwise>value=""</c:otherwise> </c:choose> <c:if test="${action == 'edit'}">readonly="readonly"</c:if>> 添加用户时,登录名是可写的,并且无法防止 XSS 攻击。 我可以以某种方式转义 userToEdit.login 和 userFromForm.login 吗? 据我所知,基本上我可以使用 c:out 来实现此目的,或者 fn:escapeXml() (例如,使用变量)。对于后者,我尝试了这样的方法: <c:set var="loginValue" value="${userToEdit.login}"/> <c:set var="loginValueForm" value="${userFromForm.login}"/> 里面选择: <c:when test="${action == 'edit' && userToEdit != null}">value="${fn:escapeXml(loginValue)}"</c:when> <c:when test="${userFromForm != null}">value="${fn:escapeXml(loginValueForm)}"</c:when> 如果是 c:out 我尝试了这样的事情 <c:choose> <c:when test="${action == 'edit' && userToEdit != null}">value="<c:out value="${userToEdit.login}"/>"</c:when> <c:when test="${userFromForm != null}">value="<c:out value="${userFromForm.login}"/>"</c:when> <c:otherwise>value=""</c:otherwise> </c:choose> 或者类似的东西: <c:choose> <c:when test="${action == 'edit' && userToEdit != null}">value=<c:out value="${userToEdit.login}"/></c:when> <c:when test="${userFromForm != null}">value=<c:out value="${userFromForm.login}"/></c:when> <c:otherwise>value=""</c:otherwise> </c:choose> 他们都不起作用。如果我输入像alert(“test”)这样的登录名,那么脚本运行不会出现任何问题。我尝试了其他一些可能性,但没有找到正确的语法(如果问题出在语法上)。我做了一些非常错误的事情。 更新:已解决。可能我只是愚蠢,因为我必须在其他地方处理这个问题。当我放置该脚本时,它将进入列出用户的页面。用户是在自定义标签和属于它的 java 类的帮助下列出的。所以在另一个jsp中有这些部分: <%@ taglib prefix="custom" uri="mytags.tld" %> 和 <custom:userList /> userList 使用 UserList.java (扩展 TagSupport),我必须在那里防止 XSS 攻击。我在那里用了这个: apache 公共文本 和 StringEscapeUtils.escapeHtml4 。 您只是将 XSS 与转义 HTML 输出混淆了。如果您使用 <c:out> 或 ${fn.escapeXML()} 那么它会阻止 XSS 渲染。标签和 EL 表达式在服务器上执行。当您在表单的输入字段中输入 <script> 标签时,它不会立即执行。但它被发送到服务器进行渲染。 您可以使用任何转义工具来转义 html 标签、js 代码和 xml,使其不输出到响应。 如需进一步阅读,请参阅跨站脚本 (XSS)。

回答 1 投票 0

在 JSTL 中显示 bean

我在使用 JSTL 显示 bean 的详细信息时遇到问题。我的servlet代码如下 protected void processRequest(HttpServletRequest 请求,HttpServletResponse 响应) 抛出 ServletExc...

回答 3 投票 0

我们可以在ReactJS中使用JSTL吗?

是否可以将 JSTL(JavaServer Pages 标准标签库)与 ReactJS 和 JSP 一起使用? ReactJS 使用 JSX(JSX 是 Javascript 的语法扩展)。同样的方式可以使用和实现 JSTL ...

回答 1 投票 0

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