3
%{control.current + #displayRows}

最終的に実行する必要があるステートメントです。私はそれを s:if タグに入れ、テストを使用して、この値が特定の範囲内にあるかどうかを確認します。

最終的に、OGNL では加算の両側が数値型と見なされないため、加算ではなく文字列の連結が得られます。ちょっといじってみるとわかる

%{control.current + control.current}

は数値加算になるため、以前に s:set タグで設定された displayRows 値は数値以外の値と見なされます。ここに私の s:set タグがあります:

<s:set name="displayRows" value="%{#application['app_settings'].settings['MAX ACCESS FIELD TITLES ROWS']}" />

設定は Java のマップを表します。キーは常に文字列ですが、さまざまなアプリケーション設定が保存されているため、値は必ずしも整数ではありません。したがって、値の型に対してできる最善の方法は Object です。そして、これが問題だと思います。OGNL は、これを自動的に数値型に変換できるものとは見なしません。

これらの概念のいくつかを説明しているhttp://incubator.apache.org/ognl/language-guide.htmlの言語ガイドを調べましたが、OGNLに「はい、値を含むこのdisplayRows」を伝える方法がわかりませんof 15 REALLY は整数です。」これを実現する方法はありますか。その場で追加できるようにする必要があるため、Javaland で追加の属性を作成して支援することはできません。OGNL、s:set タグ、および Java レベルを見てきましたが、これを実現できる適切な場所がわかりません。

4

1 に答える 1

6

Struts は、#displayRows が整数として必要な場合、文字列であると見なします (整数は、任意の組み込み型に以下を適用できると仮定します)。

最初に、struts.xml で静的メソッド アクセスをオンにします。

参考までに、ここに私の struts.xml を示します。最後の定数タグは、自分のものに追加する必要があるものです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.ui.theme" value="simple" />
    <constant name="struts.date.format" value="0,date,dd.MM.yyyy"/>
    <constant name="format.date" value="{0,date,dd.MM.yyyy}"/>
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"/> 
</struts>

次に、jsp で次のようにします。

<s:property value='@java.lang.Integer@valueOf("123") + @java.lang.Integer@valueOf("123")' />

表示するもの: 246

set タグで変換を行う方が良いでしょう:

<s:set name="displayRows" value="@java.lang.Integer@valueOf(#application['app_settings'].settings['MAX ACCESS FIELD TITLES ROWS'])" />

それから、

<s:property value="control.current + #displayRows"/>

期待どおりに動作します。

于 2011-06-15T17:35:41.223 に答える