2014-01-28 22 views
1

方法的工作将不设置与像不会设定条件值参数

<h:inputText value="#{empty foo.firstproperty ? foo.secondproperty : foo.firstproperty}" /> 

我得到这个错误条件值参数方法的工作:

Illegal Syntax for Set Operation

有没有办法?

EDIT

public class foo { 
    private String firstproperty; 
    private String secondproperty; 

    public String getFirstproperty() { 
     return firstproperty; 
    } 

    public void setFirstproperty(String firstproperty) { 
     this.firstproperty = firstproperty; 
    } 

    public String getSecondproperty() { 
     return secondproperty; 
    } 

    public void setSecondproperty(String secondproperty) { 
     this.secondproperty = secondproperty; 
    } 
} 

/baa.jsp(39,0) '#{empty foo.firstproperty ? foo.secondproperty : foo.firstproperty}' Illegal Syntax for Set Operation

+0

你可以发布foo类和完整的堆栈跟踪? – CycDemo

+0

@CycDemo我添加它。 – Darshana

回答

3

Set操作需要一个与平原setter方法属性,即是在#{bean.property}与背衬豆public void setProperty(SomeClass property)形式。设置属性的EL操作不会按照您认为的那样工作(尽管获取者确实可以使用您的EL表达式,例如在<h:outputText>中)。

这就是说,解决办法很简单:在你的视图中的两个UIInput组件和有条件地呈现其中之一根据bean属性的值:

<h:inputText value="#{fooBean.firstProperty}" rendered="#{not empty fooBean.firstProperty}"/> 
<h:inputText value="#{fooBean.secondProperty}" rendered="#{empty fooBean.firstProperty}"/> 

在这样的环境只有输入组件之一将被渲染并且将被绑定到你想要的属性。


另外,一定要坚持到Java命名约定,而你的情况转换为:

  • 用大写字母(不public class foopublic class Foo)和
  • 启动类名
  • 骆驼案例字段和方法在您的类(不是private String firstpropertyprivate String firstProperty而不是public String getFirstproperty()public String getFirstProperty())。