4

http://displaytag.svn.sourceforge.net/viewvc/displaytag/trunk/displaytag/src/main/java/org/displaytag/localization/I18nWebworkAdapter.java?revision=1173&view=markupを取得するコードを適応させていましたDisplaytag のキーからの i18n リソース (以下のコードを参照)。

これが最もクリーンなアプローチかどうか疑問に思っていました (イテレータが嫌いです)。ただし、私が見る唯一の代替手段は、ActionInvocation (ActionContext.getContext().getActionInvocation().getAction()) からアクションを取得し、ActionSupport へのキャストに依存してリソース (TextProvider を実装する) を取得することです。ただし、これはあまり安全ではないようです (action は actionsupport を拡張しない場合があります)。

他に提案はありますか?

/**
 * @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;
}
4

2 に答える 2

5

LocalizedTextUtilクラスを使用してメッセージを検索できます。

LocalizedTextUtil.findDefaultText(key, ActionContext.getContext().getLocale());

Object[]このメソッドは、メッセージに代入されるオプションのパラメーターを取ります。

于 2012-07-24T13:57:15.330 に答える
0

最善の方法は、テキスト タグと同じ方法 (実装を確認してください)、または残りのタグと同じ方法で行うことです: スタックを検索します。

また、明示的に にキャストするつもりはないかもしれません。実際に関心ActionSupportのある にキャストできるかどうかを確認する必要があります。TextProvider

イテレータに関するあなたの問題が何であるかわかりません。あなたの目標はスタックをたどって一番上のTextProvider. ニーズ/目標によっては、最上位で停止したくない場合があります。

于 2012-07-24T13:53:18.110 に答える