我正在修改代碼http://displaytag.svn.sourceforge.net/viewvc/displaytag/trunk/displaytag/src/main/java/org/displaytag/localization/I18nWebworkAdapter.java?revision=1173&view=markup,該代碼從Displaytag中的鍵(請參閱下面的代碼)獲取i18n資源。從ActionContext(i18n)獲取TextProvider的最佳方法
我想知道這是否是最乾淨的方法(我不喜歡那裏的迭代器)。然而,我看到的唯一選擇是從ActionInvocation(ActionContext.getContext()。getActionInvocation()。getAction())獲取Action,並依靠轉換到ActionSupport來獲取資源(實現TextProvider)。這似乎並不安全,但(操作可能無法擴展動作支持)。
您有任何其他建議嗎?
/**
* @see I18nResourceProvider#getResource(String, String, Tag, PageContext)
*/
public String getResource(String resourceKey, String defaultValue, Tag tag, PageContext pageContext)
{
// if resourceKey isn't defined either, use defaultValue
String key = (resourceKey != null) ? resourceKey : defaultValue;
String message = null;
OgnlValueStack stack = TagUtils.getStack(pageContext);
Iterator iterator = stack.getRoot().iterator();
while (iterator.hasNext())
{
Object o = iterator.next();
if (o instanceof TextProvider)
{
TextProvider tp = (TextProvider) o;
message = tp.getText(key, null, null);
break;
}
}
// if user explicitely added a titleKey we guess this is an error
if (message == null && resourceKey != null)
{
log.debug(Messages.getString("Localization.missingkey", resourceKey)); //$NON-NLS-1$
message = UNDEFINED_KEY + resourceKey + UNDEFINED_KEY;
}
return message;
}