-1

instanceofオブジェクトの特定のコレクションを反復処理するこのコードがあります。各要素に対して型チェック (または) 演算子を実行したいと考えています。しかし、私<s:if>のでは、評価していないようです。私は何が欠けていますか?

<s:iterator value = "myQuestions" var = "q"  status="key">

        <s:checkbox name="myQuestions[%{#key.index}].chosen" />
        <s:property value = "%{myQuestions[#key.index].question}"/> 

    <s:if test ="%{myQuestions[#key.index].getClass().simpleName} == 'Question'" > 
            THIS IS A QUESTION.
    </s:if> 


</s:iterator>
4

1 に答える 1

0

if ループの機能を実現するためのより良い方法は、(クラス名の) 文字列値を返し、Question タイプを引数として受け取る Action レイヤーにパブリック関数を 1 つ記述することです。関連する例は次のようになります

public String getClassName(Ouestion question){
  if(question instanceof SomeDerivedQuestion){
    return "someDerivedQuestion";
  }
  //other code comes below
}

JSPでは、次のようなことができます

<s:if test="%{getClassName(myQuestions[#key.index]).equals('someDerivedQuestion')}> 
  THIS IS A DERIVED QUESTION.
</s:if>

JSP は、アプリケーションのプレゼンテーション部分を処理し、Java サーバー側で必要なコーディングをカバーするために残したほうがよいでしょう。

于 2013-03-27T09:31:39.310 に答える