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

如何向JSP中tiles:insertAttribute组件传递参数?

方案实现说明

这个需求完全可以实现,Apache Tiles本身就内置了属性传递能力,逻辑和React组件传递props高度相似,具体用法如下:

基础传参用法

你可以在<tiles:insertAttribute>标签内部嵌套<tiles:attribute>来自定义传递参数,示例如下:

<tiles:insertAttribute name="body">
  <!-- 传递字符串类型参数 -->
  <tiles:attribute name="pageTitle" value="用户详情页" />
  <!-- 传递布尔/数字类型参数 -->
  <tiles:attribute name="enableOperate" value="true" />
  <!-- 传递动态参数,支持EL表达式 -->
  <tiles:attribute name="userId" value="${currentLoginUser.id}" />
</tiles:insertAttribute>

目标模板接收参数

在body属性对应的JSP模板中,使用<tiles:useAttribute>声明接收参数即可,类似React组件中声明props的逻辑:

<!-- 声明接收参数,指定参数类型 -->
<tiles:useAttribute name="pageTitle" classname="java.lang.String" />
<tiles:useAttribute name="enableOperate" classname="java.lang.Boolean" />
<tiles:useAttribute name="userId" classname="java.lang.Long" />

<!-- 直接用EL表达式使用参数,和普通请求域属性用法一致 -->
<h1>${pageTitle}</h1>
<c:if test="${enableOperate}">
  <button>编辑用户${userId}</button>
</c:if>

可选参数配置

如果某个参数是非必传的,可以给<tiles:useAttribute>添加ignore="true"属性,未传参时不会抛出异常,和React设置props默认值的效果一致:

<!-- 可选参数,未传递时取值为null -->
<tiles:useAttribute name="extraClassName" ignore="true" classname="java.lang.String" />

复杂对象传递

如果需要传递复杂自定义对象,也可以先将对象存入request域后再插入模板,注意参数名避免和全局属性冲突即可:

<!-- 父模板存入request域 -->
<c:set var="userInfo" value="${customUserObject}" scope="request" />
<tiles:insertAttribute name="body" />

<!-- 子模板直接取值 -->
<div>用户手机号:${userInfo.mobile}</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:45:04