为什么<s:text>标签名称不支持运行时表达式?

问题描述 投票:0回答:2

我需要打印当前

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”不支持运行时表达式。

如何安排它而不在操作中创建额外的类或变量?

jsp struts2 jstl ognl struts-tags
2个回答
3
投票

仅使用 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
方法。


0
投票

默认情况下,

<fmt:formatDate>
标签在页面范围内创建一个变量。要在 OGNL 中访问此变量,您应该使用
#attr
前缀。

如果您使用

getText()
来获取消息,则不需要
<s:text>
标签。

<s:property value="%{getText('app.footer', {#attr.year})}" />

您还应该知道,Struts 标记属性中禁用 JSP EL 表达式求值,以防止不同表达式引擎对表达式进行双重求值。如果Struts在属性中发现这样的表达式,就会报错。

© www.soinside.com 2019 - 2024. All rights reserved.