如何向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
相关产品推荐
相关产品推荐

