【问题标题】:Using more than one <f:viewParam .. /> in <f:metadata .. causes error在 <f:metadata .. 中使用多个 <f:viewParam .. /> 会导致错误
【发布时间】:2014-09-20 22:18:41
【问题描述】:

我想从 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>

谢谢

【问题讨论】:

  • 是否有任何理由将f:metadata 标签放在h:head 内?顺便说一句,使用 xmlns 命名空间,它适合 JSF 2.2。
  • 我认为这是最适合它的地方吗?我已经尝试将它输入到正文中,但得到相同的结果。

标签: jsf


【解决方案1】:

这对我来说在 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);
    }

}

无论我将&lt;f:metadata /&gt; 放在&lt;html /&gt; 中的哪个位置,参数都已正确设置。

看过您的最后一个 cmets,该问题似乎与 您的开发工具未将资源正确部署到服务器有关。清理您的工作区并检查正在复制的内容是否正确。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-07-31
      • 2021-08-10
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      相关资源
      最近更新 更多