Jsf 在h:inputText值和h:commandButton actionListener中使用条件运算符
我想在.xhtml文件中加载两个差异面板Jsf 在h:inputText值和h:commandButton actionListener中使用条件运算符,jsf,el,conditional-operator,Jsf,El,Conditional Operator,我想在.xhtml文件中加载两个差异面板 <h:inputText value="#{param['from']=='TERMINAL' ? terminalsList.globalFilter : merchantsList.globalFilter}" size="50" /> <h:commandButton value="Filter" actionListener="#{param['from']=='TERMINAL' ? terminalsList.filterT
<h:inputText value="#{param['from']=='TERMINAL' ? terminalsList.globalFilter : merchantsList.globalFilter}" size="50" />
<h:commandButton value="Filter" actionListener="#{param['from']=='TERMINAL' ? terminalsList.filterTerminals : merchantsList.filterMerchants}" />
<h:commandButton value="Reset" actionListener="#{param['from']=='TERMINAL' ? terminalsList.resetTerminalsFilter : merchantsList.resetMerchantsFilter}" />
当http get请求参数等于'TERMINAL'时,我想加载'terminalsList'托管bean,否则加载'merchantsList'托管bean
此代码不起作用。不能在值和操作表达式中使用条件运算符
?:
。值表达式将在表单提交时抛出一个PropertyNotWritableException
,因为EL语法并不表示可写操作,而是只读操作。操作表达式在页面加载时已抛出ELException:不是有效的方法表达式
,因为EL语法不表示方法表达式,而是表示值表达式
您需要以不同的方式解决它,然后以这样的方式,您可以在值表达式和操作表达式中完全去掉条件运算符?:
。这可以通过几种方式实现:
globalFilter
属性,但没有对齐操作侦听器方法。我建议将它们重命名为filter()
和resetFilter()
。然后,您可以从这些bean类中提取一个抽象基类,并将其用于以下类似的应用程序:
实现如下(假设这些bean是请求范围的):
(如果您的bean在不同的范围内,只需相应地更改{requestScope}
,例如{viewScope}
)
哪个代码不起作用?请给我们看所有相关代码。这包括xhtml和relevand支持bean。此外,请描述哪些不起作用。Stacktrace?还是一些意想不到的行为?这是xhtml代码,格式化不起作用,所以请提供一些示例代码,它将帮助我们解决问题。您是否尝试在dataTable或任何其他组件中加载列表