为什么 <s:text> 标签名不支持运行时表达式?
Why <s:text> tag name does not support runtime expressions?
我需要在当前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" does not support runtime expressions.
如何在不创建额外的 类 或动作变量的情况下安排它?
您可以只使用 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})}" />
您还应该知道 JSP EL 表达式求值在 Struts 标记属性中被禁用,以防止不同表达式引擎对表达式进行双重求值。如果Struts在属性中找到这样的表达式,就会报错。
我需要在当前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" does not support runtime expressions.
如何在不创建额外的 类 或动作变量的情况下安排它?
您可以只使用 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})}" />
您还应该知道 JSP EL 表达式求值在 Struts 标记属性中被禁用,以防止不同表达式引擎对表达式进行双重求值。如果Struts在属性中找到这样的表达式,就会报错。