【问题标题】:Navigate to other view passing a parameter导航到传递参数的其他视图
【发布时间】:2016-12-24 03:47:20
【问题描述】:

我当前的环境是 JRE 1.7、JSF 2.2、Eclipse Luna。在我的应用程序的某个页面 (entity_index.xhtml) 中,我有以下 (PrimeFaces) 按钮:

<p:commandButton value="Details" action="entity_details"
                 ajax="false" onclick="this.form.target='_blank'">
    <f:param name="id" value="#{entity.id}" />
</p:commandButton>

这个想法是提供一个按钮,以便用户可以单击它,当前实体的一些详细信息将显示在另一个浏览器选项卡(页面entity_details.xhtml)中。这是众多按钮中的一个,因此entity_index.xhtml 页面显示了许多实体实例,每个实例都有一个详细信息按钮。

按钮的工作方式是打开一个新选项卡并显示正确的页面 (entity_details.xhtml),但实体 ID 永远不会到达处理详细信息页面 (EntityDetailsMB) 的 bean。详情页面如下:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:dsi="http://www.cce.ufpr.br"
    template="/private/template/sbadmin.xhtml">
<f:metadata>
    <f:viewParam name="id" value="#{entityDetailsMB.id}"/>
</f:metadata>

<ui:define name="content">
<h2 class="page-header">#{entityDetailsMB.entity.name}</h2>
<h:form id="form">
...
</ui:composition>

注意有一个&lt;f:metadata/&gt;元素专门用来捕获从索引页发送的参数,并转发到EntityDetailsMB中的id属性,这里有以下内容:

public Entity getEntity() {
    return entityById(id);
}

public Long getId() {
    return id;
}

public void setId(Long value) {
    id = value;
}

因为永远不会调用setId() 方法,所以getEntity() 总是返回null

让它发挥作用还缺少什么?

【问题讨论】:

  • 您是否尝试过做出结果并添加参数以从第一个 JSF 页面获取数据

标签: jsf-2 primefaces navigation viewparams


【解决方案1】:

p:commandButton 执行 POST 请求。您只想GET 一个带有实体详细信息的视图,而不是POST 服务器,因此您需要h:link

<h:link value="Details" outcome="entity_details" target="_blank">
    <f:param name="id" value="#{entity.id}" />
</h:link>

那么,目标页面中的f:viewParam就可以处理url参数了:

<f:metadata>
    <f:viewParam name="id" value="#{entityDetailsMB.id}"/>
    <f:viewAction action="#{entityDetailsMB.init}" />
</f:metadata>

使用f:viewAction 来初始化您的实体,而不是在getter 中进行,which is discouraged

public void init(){
    entity = entityById(id);
}

另请参阅:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2011-04-06
    相关资源
    最近更新 更多