gpt4 book ai didi

jsf-2 - 导航到传递参数的其他 View

转载 作者:行者123 更新时间:2023-12-03 22:40:00 31 4
gpt4 key购买 nike

我当前的环境是 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>

注意这里有一个 <f:metadata/>元素专用于捕获从索引页面发送的参数并将其转发到 id房产在 EntityDetailsMB ,其中有以下内容:
public Entity getEntity() {
return entityById(id);
}

public Long getId() {
return id;
}

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

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

缺少什么才能使其正常工作?

最佳答案

p:commandButton执行 POST 请求。您只想获取包含实体详细信息的 View ,而不是 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);
}

另见:
  • Choosing how to pass parameters to a target bean/page using JSF
  • When to use f:viewAction / preRenderView versus PostConstruct?
  • 关于jsf-2 - 导航到传递参数的其他 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38997418/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com