You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSP新手求助:编写的对话框页面中href链接未正常渲染

JSP链接渲染异常修复方案

我是JSP新手,为对话框编写了如下JSP代码,但页面中未正常渲染出href链接。

原代码

<%@include file="/apps/myproject/global.jsp"%> 
Industry Level1 Updates

<% String title=properties.get("linkLabel",""); %>

<c:set var="industriesPlaceholder" value="- Click to add Industries navigation -"/> 
<slingx:property var="industriesTitle" name="title" resourcePath="./industriesLinks"/>

<c:out value="${empty industriesTitle && isEditMode ? industriesPlaceholder : ''}" escapeXml="${escapeXml}" />

<c:set var="industriesLinksNode" value="${tef:getRelativeResource(resource, 'industriesLinks')}" />

${industriesTitle}
        <slingx:property var="industrylabel" name="label" resourcePath="${industriesResource.path}" />
        <slingx:property var="industryDestination" name="destination" resourcePath="${industriesResource.path}" />
        <div class="top-nav-auth-item-wrapper">
            <li><a href="<tef:link path="${empty industryDestination ? # : industryDestination}"/>">
                <span>${industrylabel}</span>
            </a></li>
        </div>

</c:if>

对话框截图

对话框截图

问题分析与修复步骤

1. 变量名不匹配

原代码定义了industriesLinksNode存储资源,但后续用了未定义的industriesResource,导致无法获取链接的label和目标地址,这是核心问题。

2. 缺少资源遍历逻辑

industriesLinksNode是包含多个链接的资源节点,需要用<c:forEach>遍历每个子资源才能逐个渲染链接。

3. 标签语法错误

  • <tef:link>中的引号嵌套错误,EL表达式的引号要和外层标签引号区分开;空值处理用#不符合规范,应改为空字符串或默认路径。
  • 存在未闭合的</c:if>标签,需要补充对应的<c:if>判断条件。
  • HTML结构不规范:<li>必须放在<ul>或<ol>容器内,不能直接嵌套在<div>里。

修复后的代码

<%@include file="/apps/myproject/global.jsp"%> 
Industry Level1 Updates

<% String title=properties.get("linkLabel",""); %>

<c:set var="industriesPlaceholder" value="- 点击添加行业导航 -"/> 
<slingx:property var="industriesTitle" name="title" resourcePath="./industriesLinks"/>

<c:out value="${empty industriesTitle && isEditMode ? industriesPlaceholder : ''}" escapeXml="${escapeXml}" />

<%-- 获取行业链接资源节点 --%>
<c:set var="industriesLinksNode" value="${tef:getRelativeResource(resource, 'industriesLinks')}" />

<%-- 仅当资源节点存在且非空时渲染链接 --%>
<c:if test="${not empty industriesLinksNode}">
    <div class="top-nav-auth-item-wrapper">
        <ul>
            <%-- 遍历每个行业链接子资源 --%>
            <c:forEach var="industryResource" items="${industriesLinksNode.children}">
                <slingx:property var="industrylabel" name="label" resourcePath="${industryResource.path}" />
                <slingx:property var="industryDestination" name="destination" resourcePath="${industryResource.path}" />
                
                <li>
                    <%-- 修复tef:link的引号嵌套和空值处理 --%>
                    <a href="<tef:link path='${empty industryDestination ? "" : industryDestination}'/>">
                        <span>${industrylabel}</span>
                    </a>
                </li>
            </c:forEach>
        </ul>
    </div>
</c:if>

修复说明

  • 补充了<c:if>判断,确保只有存在链接资源时才渲染链接区域
  • 用<c:forEach>遍历industriesLinksNode的子资源,逐个获取每个链接的label和destination
  • 修正了tef:link的引号嵌套问题,空值时使用空字符串代替#
  • 调整HTML结构,用<ul>包裹<li>,符合规范
  • 变量名统一为industryResource,避免未定义错误

内容的提问来源于stack exchange,提问作者HM6

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 07:36:29