【问题标题】:JSF not rendered when the url has a parameter当 url 有参数时,JSF 不呈现
【发布时间】:2010-07-30 13:45:29
【问题描述】:

我的问题是,例如当我这样做时

<h:outputLink value="changeinfo.jsf">
                Change name
                <f:param name="change" value="name"/>
</h:outputLink>

那么请求的url就是

http://localhost:45054/WMC/user/changeinfo.jsf?change=name

我的 faces servlet 的 url 模式如下所示

<servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
 </servlet-mapping>

现在在 changeinfo 页面上

<f:verbatim rendered="#{'bean.param'} == 'name'"> 
NAME 
<h:form id="form1"> 
... 
</h:form>
</f:verbatim>

然后在生成的 html 页面上,我只看到 NAME 而不是表单。这是为什么呢?

【问题讨论】:

  • 它应该可以正常工作。查询字符串根本不会在 url 模式匹配上进行测试。你的问题出在其他地方。什么 JSF 实现/版本?什么网络服务器实现/版本?您是否对 URL 进行了双重、不、三重检查?
  • 该 url 与该模式匹配。所以你在其他地方有问题。检查日志。
  • 您可能需要重新阐述“渲染”的含义。问题的模糊性可能就在那里。
  • 它是 JSF 2.0 和 glassfish v3。现在我正在尝试制作一个导航案例,如 volothamp 答案中的链接。
  • 我的意思是当我查看“已编译”的 html 页面时,像
    ....
    等所有内容都消失了。该页面是空的。

标签: java web-applications jsf servlets mapping


【解决方案1】:

您不能将 JSF 组件放在 f:verbatim 中,只能使用普通的 HTML。请改用h:panelGroup

另外,去掉 EL 中 bean 属性标识符周围的引号。否则它将被视为普通的香草字符串。您还应该将字符串比较放在 EL 表达式中。

总结:

<h:panelGroup rendered="#{bean.param == 'name'}">
    ...
</h:panelGroup>

额外提示:您可以通过#{param} 访问请求参数。如果您在托管 bean 中不再需要它,那么您也可以这样做:

<h:panelGroup rendered="#{param.change == 'name'}">
    ...
</h:panelGroup>

【讨论】:

  • 该死的 BalusC!在我开始之前总是回答 JSF 问题! ;P
【解决方案2】:

你看到了吗:How to create a GET request with parameters, using JSF and navigation-rules

问题不在于扩展,而是 JSF 不支持这种开箱即用的方法。如果您必须编写 McDowell 解决方案或更改 Web 框架,例如使用 Seam

顺便说一句,JSF 2 将支持这种导航方式。看一看:fluent-navigation-jsf-2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 2012-12-01
    • 2011-06-27
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多