0

サーブレット例外を無効な式エラーとしてスローするサンプルコードを次に示します。

したがって、データ型は次のとおりです。

boolean: bean1.isValid1
boolean: bean1.isValid2
boolean: bean1.isValidSubCondn

String: bean2.StringData1 
String: bean2.StringData2 

JSTLタグ内でこれを使用したい:

 <x:div id="someID" 
               rendered='#{!bean1.isValid1 || bean1.isValid2 ? (bean1.isValidSubCondn ? bean2.StringData1.matches("^a|^b") : bean2.StringData2.matches("^c|^d") ) : "true"}'>

これが機能する場合は、JSP自体でRegExチェックを実行する代わりに、メソッド呼び出しを追加したいと思います。それも機能しません-おそらく同じ構文の問題に関係しています。

[ServletException in:/beanName.jsp] 
 Invalid expression:
  '${!bean1.booleanProperty1 && bean1.booleanProperty2? (beanInstance.booleanProperty3 ? beanName.methodName1(bean2.stringProperty) : beanName.methodName1(bean3.stringProperty) ) :'true'}'' 

したがって、私のJSPコードは次のとおりです。

   <x:div id="something" rendered="#{not bean1.booleanProperty1 or (bean1.booleanProperty2 ? (beanInstance.booleanProperty3 ? beanName.methodName1(bean2.stringProperty) : beanName.methodName1(bean3.stringProperty) )) :true}"> 

これも機能しません:

   <x:div id="something" rendered="#{!bean1.booleanProperty1 || bean1.booleanProperty2 ? (beanInstance.booleanProperty3 ? beanName.methodName1(bean2.stringProperty) : beanName.methodName1(bean3.stringProperty) ) :true}"> 

したがって、beanName.methodName1は次のようになります。

public boolean methodName1(String stringValuex) {
    if(stringValuex.matches("^A|^B"))
        { return true; }

   return false; 
 }

または、Beanクラスでgetter / setterメソッドのアプローチを使用して、プロパティを取得および設定してみました。JSPでも機能しません。解決方法がわからない。特定の結果を表示するには、別のクラスのBeanデータを使用して検証を実行する必要があります。

これがセッター/ゲッターのアプローチです。これを使用する方法を理解してから、JSP検証で使用する必要があります。

   <x:div id="something" rendered="#{!bean1.booleanProperty1 and bean1.booleanProperty2 ? (beanInstance.booleanProperty3 ? beanName.booleanFieldName(bean2.stringProperty) : beanName.booleanFieldName(bean3.stringProperty) ) : true}"> 

beanName.javaクラス

 private boolean booleanFieldName = false;
   public boolean getbooleanFieldName() {
        return this.booleanFieldName;
    }

    public void setbooleanFieldName(String valueToTest) {
         if(valueToTest.matches("^a|^A"))
            { this.booleanFieldName= true;
            }
        this.booleanFieldName= false; 
    }
4

1 に答える 1

2

3進数で型を混在させることはできず、ブールwith文字列"true"`を混合しています。

これを試して、次のように置き換え"true"てくださいtrue

rendered='#{!bean1.isValid1 || bean1.isValid2 ? (bean1.isValidSubCondn ? bean2.StringData1.matches("^a|^b") : bean2.StringData2 .matches("^c|^d") ) : true}'>
于 2013-01-04T01:01:51.270 に答える