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

Struts2如何实现类似Struts1的ActionError参数替换配置值功能

Struts2 实现资源键占位符替换的ActionError方案

Struts2 并没有把资源读取、参数替换的逻辑耦合在addActionError()方法中,而是将这部分能力拆分到了TextProvider接口的getText()系列方法里,常规实现步骤如下:

前置条件

你的Action类首先要继承com.opensymphony.xwork2.ActionSupport(Struts2 业务Action的默认父类,已经内置实现了TextProvider接口),且已经正确配置了国际化资源文件路径。

实现代码

针对你给出的示例,直接在捕获异常的逻辑中调用getText()方法完成占位符替换,再将返回的消息传给addActionError()即可:

try {
    // 业务逻辑代码
} catch (Exception e) {
    // 第一个参数为properties文件中的消息键,第二个参数为占位符对应的替换值数组
    String errorMsg = getText("name.error.param", new Object[]{e.getMessage()});
    addActionError(errorMsg);
}

多占位符场景适配

如果你的资源键有多个占位符,比如:

name.error.multi = 操作失败,错误码:{0},错误原因:{1}

只需要按占位符序号顺序传入替换值即可:

String errorMsg = getText("name.error.multi", new Object[]{errorCode, e.getMessage()});
addActionError(errorMsg);

未继承ActionSupport的特殊场景

如果你的Action没有继承ActionSupport,可以手动获取TextProvider实例完成消息读取:

TextProvider textProvider = new TextProviderFactory().createInstance(this.getClass(), ActionContext.getContext().getLocale());
String errorMsg = textProvider.getText("name.error.param", new Object[]{e.getMessage()});
addActionError(errorMsg);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:18:01