如何在JSF EL中访问html组件?

时间:2010-10-06 22:58:06

标签: jsf

我希望facelet(jsf 2.0)中的一些代码可以工作:

  <h:inputText id="q" />
  <h:button outcome="/search.xhtml?q=#{q.value}" />

但是当我按下按钮时,搜索页面会打开而没有任何参数。

我想,我的EL表达错了。是否可以从EL表达式访问 inputText 值?如果没有,我怎样才能实现相同的功能?

2 个答案:

答案 0 :(得分:1)

我已经完成了使用普通的HTML格式:

<form action="faces/search.xhtml" method="get">
      <input type="text" name="query" />
      <input type="submit" value="Find" />
</form>

在search.xhtml中我有查看参数来获取查询字符串的值:

    <f:metadata>
        <f:viewParam name="query" />
    </f:metadata>

此解决方案存在问题 - “faces / search.xhtml”是硬编码的。此外,当我将此表单放在search.xhtml中并执行多次搜索时,我在浏览器URL中有类似的内容:

  

“HTTP://本地主机:8080 /应用/面/面/面/ search.xhtml”

我认为可以使用PrettyFaces(TODO:)

解决此问题

答案 1 :(得分:0)

这是一个很晚的答案,但我想许多发现这篇文章的人都会对EL是否可以访问html组件以及如何访问html产生同样的疑问: 是的,EL可以访问隐式JSF对象的JSF组件。 但是,到目前为止,我仅看到并使用了component.valid的示例:

<h:inputText id="streetNumber" value="#{property.streetNumber}" title="streetNumber" required="true" requiredMessage="Please enter the street number!" validatorMessage="Please enter a street number between 1 and 1000" converterMessage="Please enter a number" pt:placeholder="900">
<f:convertNumber integerOnly="true"/>
<f:validateLongRange minimum="1" maximum="1000" />
</h:inputText>
<h:message for="streetNumber" class="#{!streetNumber.valid ? 'label label-warning' : 'none'}" /> 

所以,我建议您(德米特里)将代码更改为

<h:button outcome="#{"/search.xhtml?q=" + q.value}" />

请让我知道它是否有效,因为我也很好奇,遇到类似问题的任何人都可以效仿我的示例,并请告诉我结果。