Jsf 在viewParam上转换GET请求参数时出现问题

Jsf 在viewParam上转换GET请求参数时出现问题,jsf,viewparams,jsf-2.2,java-ee-7,Jsf,Viewparams,Jsf 2.2,Java Ee 7,我正在尝试转换从另一个视图传递的GET请求参数,如下所示: <f:metadata> <f:viewParam name="id" value="#{targetViewBean.fooFromSourceView}" converter="fooConverter" converterMessage="Foo converter message"

我正在尝试转换从另一个视图传递的GET请求参数,如下所示:

<f:metadata>
    <f:viewParam name="id" 
                 value="#{targetViewBean.fooFromSourceView}" 
                 converter="fooConverter" 
                 converterMessage="Foo converter message"
                 required="true" requiredMessage="Foo required message"/>
    <f:viewAction action="#{targetViewBean.doSomethingWithFoo()}"/>
</f:metadata>
背豆 转换器
在查看了您发送的实际代码后,我发现了问题。问题不在于转换器。它将xml名称空间放在项目的顶部。例如,在
sourceview.xml

 xmlns:h="http://xmlns.jcp.org/jsf/html"
 xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
 xmlns:f="http://xmlns.jcp.org/jsf/core"
但它们应该是

xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core">
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
目标视图。xhtml
应该

xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core">
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
GlassFish似乎出于某种原因更改了名称空间。我没有试图找出它为什么会这样,所以请记住这一点。无论如何,一旦我改变了它,正确的相位就会在GlassFish的输出窗口中输出。所以,在需要的地方去做必要的改变

注意:如果您想知道为什么会出现以下错误

The metadata component needs to be nested within a f:metadata tag. Suggestion: enclose the necessary components within <f:metadata> 
元数据组件需要嵌套在f:metadata标记中。建议:将必要的组件封装在
这似乎是一个问题

另外,我不确定为什么您的
h:link
嵌套在
h:form
中。不需要

更新 似乎有些标记库功能不全,或者我读错了


如果值为null,您如何判断发送的参数?我试着运行一个示例代码,它对我来说运行得很好。唯一的区别是我更改了
Db.INSTANCE.getFoos()
列表
doSomethingWithFoo()
正在输出
true
。您确定它不在其他地方吗?GET请求包含具有正确值的
id
参数。由于
getAsString
value
为null,因此永远不会调用
doSomethingWithFoo()
。可能是别的,但我不知道是什么。代码来自NetBeans 7.3.1.Hmmm中一个全新的Java EE 7 maven企业应用程序项目……我假设
outputText
只显示
ID
Ok,让我再次检查我的工作。我刚刚检查了转换器端,
ID
请求参数确实存在。顺便说一句,glassfish在启动时抛出了2条消息,但我认为它与类'javax.ejb.PostActivate'没有找到无关,基于它的拦截没有启用,并且与
javax.ejb.PrePassivate
的消息相同。是的,我在glassfish 4上使用了Java EE 7(我提到过吗?如果没有,非常抱歉),你做到了。不用担心。直到今天早上它才点击。我想这是glassfish的问题,因为这是新的名称空间。筑巢是一种把所有东西都扔到墙上,看看有什么东西粘在墙上。谢谢你在这件事上走了这么远:)不客气。我不知道有新的,因为我刚刚升级。现在我觉得我缺少答案。我将调查.AFAIK
xmlns.jcp.org
是否是JSF-2.2的正确名称空间。如果它们包含bug,那就不同了。
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core">
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
The metadata component needs to be nested within a f:metadata tag. Suggestion: enclose the necessary components within <f:metadata>