0

这是将 Servlet 异常作为无效表达式错误抛出的示例代码。

数据类型因此是:

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 数据执行验证以显示某些结果。

这里是setter/getter的方法,需要弄清楚如何使用这个,然后,在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

您不能在三元中混合类型,并且您正在混合布尔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 回答