2009-08-06 8 views
3

次のコードは動作していません。私はなぜこれが動かないのか見当たりません。にstruts2イテレータタグが含まれています

<s:iterator value=%{questions} id="question"> 
    <s:if test='%{incorrectQs.contains("#question.questionId")}'> 
     Print something here 
    </s:if> 
</s:iterator> 

上記のコードでは、基本的に私はアクションクラスにgetQuestionsというメソッドを持っています。このリストには、質問IDを取得/設定するExamクラスのオブジェクトが含まれています。私はまた、文字列を含むwrongQsリストを持っています。私は、wrongQsにquestionIdが含まれているかどうか確認しています。それは私はいくつかのテキストを印刷したい場合。上記のコードは機能しませんが、以下のコードは無作為に動作します。時にはそれが動作し、時にはそれが... :(

<s:iterator value=%{questions}> 
    <s:if test='%{incorrectQs.contains("${questionId}")}'> 
     Print something here 
    </s:if> 
</s:iterator> 

は誰が?

+0

文字列試験のquestionIdプロパティですか?そうでない場合は、おそらくタイプ変換の問題です。文字列の値が文字列のtoString()値と等しい場合でも、String equalsメソッド(List containsメソッドによって呼び出される)はIntegerを渡すとtrueを返しません整数。 –

+0

はい、それは文字列です... – Omnipresent

+0

実際にタイプをチェックする方法はありますか? – Omnipresent

答えて

0

をこの中にいくつかの洞察を提供することができていない私はあなたのActionクラスがどのように見えるかわからないんだけど、あなたのような何かを試すことができます。このおs:iteratorタグの中に、私は各%{foo}式はあなたが反復されている特定のインスタンスにアクセスしようと考えている(質問の質問の、ではないリスト)

注:使用する方法があるかもしれません#から親オブジェクトを参照するs:iteratorタグのところにあります。私はちょうどそれをしていないので、ここであなたを助けるかどうかについてはっきり言うことはできません。あなたのJSPで

public class ActionClass ... { 

    private List<Question> mQuestions; 
    private Set<Integer> mIncorrectQuestions; 

    public String execute() { 
     // build/read questions, populate incorrect questions, etc... 
     return SUCCESS; 
    } 

    public List<Question> getQuestions() { 
     return mQuestions; 
    } 

    // does not need to be an inner class 
    public class Questions { 

     private int mQuestionId; 

     public int getQuestionId() { 
      return mQuestionId; 
     } 

     public boolean getIsIncorrect() { 
      return mIncorrectQuestions.contains(mQuestionId); 
     } 
} 

そして:

<s:iterator value='%{questions}'> 
    <s:if test='%{isIncorrect}'> 
     Question <s:property value='${questionId}'/> is Incorrect! 
    </s:if> 
</s:iterator> 
0
#question.questionId.toString() 
関連する問題