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

UrlDecodeException异常:Struts2中Ajax读取div年份数据报错

Struts2中Div文本传参触发UrlDecodeException异常

问题场景

需求为从HTML获取年份信息,以此查询对应数据库数据。使用<s:select>选择年份时功能正常,但使用<div>中的文本年份作为参数请求时,抛出UrlDecodeException异常。

相关代码

URL定义

<s:url var="loaderURL"
   namespace="/myProject/myFolder"
   action="myAction"
   method="checkInformation">
</s:url>

正常工作的Select组件

<s:select id="year-select"
   data-url="%{#loaderURL}"
   name="years"
   list="items.years"
   listKey="value"
   listValue="label"/>

无法工作的Div组件

<div class="divClass" data-url="%{#loaderURL}">
    <s:property value="items.year" />
</div>

jQuery代码

$("#year-select").each(function() {
    const url = $(this).attr('data-url');
    fetchInformation(url, $(this).val());
    $(this).change(function() {
        fetchInformation(url, $(this).val());
    });
});

$(".divClass").each(function() {
        const url = $(this).attr('data-url');
        fetchInformation(url, $(this).text());
});

异常信息

ERROR [io.undertow.request.io] (default I/O-22) UT005090: 
Unexpected failure: io.undertow.util.UrlDecodeException: 
UT000072: Failed to decode url /myProject/myFolder/%%7B to charset UTF-8

问题原因

<div>是原生HTML标签,Struts2不会自动解析其属性中的OGNL表达式。因此data-url="%{#loaderURL}"并未被替换为实际生成的URL,而是以原始字符串形式传递到前端。当jQuery获取该值并拼接参数时,%{被URL编码为%7B,又因场景触发双重编码变为%%7B,最终触发URL解码异常。

而<s:select>是Struts2内置标签,框架会自动解析%{#loaderURL}为实际请求URL,因此不会出现编码问题。

解决方案

方案1:用Struts2标签存URL,再通过EL表达式赋值

先通过<s:set>将URL变量存入页面上下文,再用EL表达式给div的data-url赋值:

<s:set var="loaderURLValue" value="#loaderURL" />
<div class="divClass" data-url="${loaderURLValue}">
    <s:property value="items.year" />
</div>

方案2:直接在div属性中用<s:property>输出URL

利用Struts2的<s:property>标签直接输出URL值,替代OGNL表达式:

<div class="divClass" data-url="<s:property value='#loaderURL' />">
    <s:property value="items.year" />
</div>

额外优化:清理文本多余空格

div的文本可能包含换行、空格等空白字符,建议在jQuery中添加trim()处理,避免无效参数:

$(".divClass").each(function() {
        const url = $(this).attr('data-url');
        fetchInformation(url, $(this).text().trim());
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:52:53