在</f:viewparam>中使用多个<f:viewparam .. =“”>

时间:2014-07-29 13:52:50

标签: jsf

我想从URL解析两个参数,但是当我在页面的标题中包含两个f:viewParam时,我收到一个错误: 元数据组件需要嵌套在f:metadata标记中。建议:将必要的组件包含在f:metadata

网址示例: http://domain.com?email=blah@dom.com&key=4793e258-518f-432d-9af2-8d639a13757d

我正在使用JSF 2.2.6并且我尝试将名称空间(下面)从xmlns.jcp.org交换到java.sun.com,但这没有任何区别。

我的简化页面是:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">
<f:view>
    <h:head>
        <f:metadata>
            <f:viewParam name="email" value="#{credentialsBacking.returnedEmail}"/>
            <f:viewParam name="key" value="#{credentialsBacking.returnedActivationKey}"/>
        </f:metadata>
    </h:head>
    <h:body>
    </h:body>
</f:view>
</html>

由于

2 个答案:

答案 0 :(得分:0)

嗯,我不知道为什么,但我从头开始重新创建项目,问题就消失了。奇怪的是我不得不使用xmlns的名称空间:f =“http://java.sun.com/jsf/core”而不是xmlns:f =“http://xmlns.jcp.org/jsf/core”来获取保存到bean的参数。

答案 1 :(得分:0)

这对我来说在Mojarra 2.2.6和Tomcat 7中没有问题:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core">
<f:view>
    <h:head>
        <f:metadata>
            <f:viewParam name="email" />
            <f:viewParam name="key" />
        </f:metadata>
    </h:head>
    <h:body>
    #{email} - #{key}
    </h:body>
</f:view>
</html>

这个也是:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core">
<f:view>
    <h:head>
        <f:metadata>
            <f:viewParam name="email" value="#{bean1.email}" />
            <f:viewParam name="key" value="#{bean1.key}" />
        </f:metadata>
    </h:head>
    <h:body>
    #{bean1.email} - #{bean1.key}
    </h:body>
</f:view>
</html>
@ManagedBean
@ViewScoped
public class Bean1 {

    public Bean1() {
        System.out.println("Bean created");
    }

    private String email;

    private String key;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
        System.out.println(email);
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
        System.out.println(key);
    }

}

<f:metadata />置于<html />内的位置并不重要,参数设置正确。

看过上次的评论后,问题似乎与您的开发工具没有正确地将资源部署到服务器有关。清理工作区并检查正在复制的内容。