将JSF URL参数传递给CDI Bean

时间:2013-07-18 19:53:48

标签: jsf-2.2 glassfish-4 java-ee-7

我正在重新设计一个项目,我发现了我认为是一个错误,但我对这个错误源自何处感到困惑。

基本上我所要做的就是将一个URL参数传递给辅助bean。没有什么魔法,有很多不同的方法来实现这一目标。以下是我经常使用的那些;

  1. 我可以将bean从@Named更改为@ManagedBean,然后使用@ManagedProperty
  2. 我可以使用FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()访问参数,然后从Map
  3. 获取所需的参数
  4. 或者我可以使用:<f:metadata><f:viewParam name="id" value="#{backingBean.id}"/></f:metadata>
  5. 当我使用JSF 2.1与Glassfish 3+时,所有这三个都完美无缺。问题是我目前的项目是使用JSF 2.2和Glassfish 4,但这些都不起作用!无论我做什么,都不会设置参数,并且总是最终为null。

    我不确定如何进一步追踪这一点。上一个项目的明显变化是我使用的是Glassfish 4而不是3,JavaEE 7而不是6,而JSF 2.2而不是2.1。 我没有收到任何可以发布的错误或例外情况。

    我还可以测试任何其他内容或我可以尝试的任何其他解决方案。如果失败,任何人都知道任何可能导致此问题的报告错误或更改。最后有人可以重现这个错误吗?

1 个答案:

答案 0 :(得分:4)

问题与命名空间有关!

如果您声明命名空间,一切正常;

xmlns:f="http://java.sun.com/jsf/core"

如果您声明命名空间,则 将无效;

xmlns://xmlns.jcp.org/jsf/core

请注意,netbeans会自动填充您的命名空间。我真的希望这能节省一些时间!