2016-10-05 4 views
1

Struts 2バリデータ@FieldExpressionValidator@ExpressionValidatorを使用しています。これらのバリデータはOGNLの式をチェックします。これらの式で文字列を処理するケースはたくさんあります。Struts 2バリデータエクスプレッションでのStringUtilsの使用

expression="(captcha=='' && captcha== null || ....) 

ここでは、StringUtils(isEmpty、trimToEmpty、...)を使用できると非常に便利です。

我々はfalseにstruts.ognl.allowStaticMethodAccessを設定すると、セキュリティ上の問題のために、我々は行動

public StringUtils getStringUtils(){ 
     return new StringUtils(); 
    } 

、その後、式のstringUtils.isEmpty(captcha)に、このゲッターを追加することによって、それを解決しようとしました。しかし、それは動作しませんでした。

デバッグするために、我々は

ActionContext.getContext().getValueStack().findValue("stringUtils"); //returns [email protected] which shows there is an object in the stack 

ActionContext.getContext().getValueStack().findValue("stringUtils.isEmpty('dd')"); //returns null 

任意のコメントをテストしました?!

答えて

1

isEmptyは静的メソッドであり、クラス接頭辞を使用して静的にアクセスする必要があります。すぐにOGNLを使用しているとして、あなたは静的メソッドへのアクセスを許可または

ActionContext.getContext().getValueStack().findValue("stringUtilsIsEmpty('dd')"); 

しかし、その後

public boolean stringUtilsIsEmpty(String captcha) { 
    return StringUtils.isEmpty(captcha); 
} 

つまり、メソッドのラッパーを記述する必要があり、JSPであなたが行うことができます

<s:if test="captcha != null && captcha != ''"> 
    do something 
</s:if> 

これはStringUtils#isEmpty()のように同じことをしています。

+0

'StringUtil'メソッドごとにメソッドを追加する必要があります:-(もっと良い解決法がありますか? –

+0

これはたくさんの方法があるかもしれませんが、具体的に何を求めているのか分かりません。 –

+0

親愛なる@RomanCはいコードがうまくいきました、私は探していましたが、あなたの質問にはうまくいかないコードがあります。 'Enhance'のために' StringUtils'メソッドごとにメソッドを別々に定義する必要がなくなりました。これが別の質問だと思うと、私は別の質問をすることができます! –

関連する問題