我需要打印当前
year
内的文本。
我的代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<jsp:useBean id="now"
class="java.util.Date"
/>
<fmt:formatDate
var="year"
value="${now}"
pattern="y"
/>
<p>
<s:text
name="%{getText('app.footer', {${year}})}"
/>
</p>
错误是:
“name”不支持运行时表达式。
如何安排它而不在操作中创建额外的类或变量?
仅使用 Struts2 标签即可,无需使用
fmt
标签。
<s:bean var="date" name="java.util.Date" />
<s:date var="year" name="#date" format="y" />
<p>
<s:text name="app.footer">
<s:param value="#year" />
</s:text>
</p>
您不能在 S2 标签内使用
${}
。
<s:text>
标签将呈现 I18n 文本消息,无需使用其中的 getText
方法。
默认情况下,
<fmt:formatDate>
标签在页面范围内创建一个变量。要在 OGNL 中访问此变量,您应该使用 #attr
前缀。
如果您使用
getText()
来获取消息,则不需要 <s:text>
标签。
<s:property value="%{getText('app.footer', {#attr.year})}" />
您还应该知道,Struts 标记属性中禁用 JSP EL 表达式求值,以防止不同表达式引擎对表达式进行双重求值。如果Struts在属性中发现这样的表达式,就会报错。