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

