0
<% 
    RegisterAction aro=new RegisterAction();    
    int count=aro.getLi().size();
%>

<s:iterator value="li" begin="0" end="1">
    <fieldset>
        name     : <s:property value="name"     /><br/>
        password : <s:property value="password" /><br/>
        email    : <s:property value="email"    /><br/>
        gender   : <s:property value="gender"   /><br/>
        country  : <s:property value="country"  /><br/>
    </fieldset>
</s:iterator>

end反復のために属性値を動的に設定し、count変数を読み取る方法は?

これを使用end="<%=count%>"しても機能しません。

使用するend="count"と機能しますが、ページを更新するかリロードすると、同じ結果の複数の数値が得られます。

4

2 に答える 2

0

OGNLの表記を使用して、#attrScritplet ブロック内に設定された変数を読み取ることができます。

<% 
    RegisterAction aro = new RegisterAction();
    int count = aro.getLi().size();
    pageContext.setAttribute("count", count); // pushing the variable into the pageContext
%>

<s:iterator value="li" begin="0" end="%{#attr['count']}">
    <fieldset>
        name     : <s:property value="name"     /><br/>
        password : <s:property value="password" /><br/>
        email    : <s:property value="email"    /><br/>
        gender   : <s:property value="gender"   /><br/>
        country  : <s:property value="country"  /><br/>
    </fieldset>
</s:iterator>

しかし、さまざまな理由から、 Scriptlet を使用するべきではありません

この回答に示されているように、目的に応じてスクリプトレットの代わりに Struts タグを使用することも非常に簡単です。


編集

使用するend="count"と機能しますが、ページを更新するかリロードすると、同じ結果の複数の数値が得られます。

ただし、コードが常に初期状態のコレクションを参照しているため、Scriptlet ブロックで Action をインスタンス化する理由と、ページの読み込みごとに count の結果が異なると予想される理由は不明です。

RegisterAction が現在の actionである場合、おそらく必要なものは次のとおりです。

<s:iterator value="li" begin="0" end="%{li.size()}">

それは実際に

<s:iterator value="li">

単純な反復を 2337 倍に複雑化しすぎています。

于 2015-07-27T12:42:04.027 に答える