【问题标题】:View parameter when navigating to another page导航到另一个页面时查看参数
【发布时间】:2013-03-15 14:51:33
【问题描述】:

我正在使用 JSF2,我需要能够通过 commandLink 将参数从一个 JSF 页面传递到另一个页面。

我在页面 funding.xhtml (ViewScoped) 上并定义了以下链接:

<p:commandLink styleClass="toolbar" 
               action="/application/customerApplicationManagement.jsf">
    <p:graphicImage url="/resources/gfx/search.png" />
    <h:outputText value="#{msg.menu_searchApplications}" styleClass="toolbarLink" />
</p:commandLink>

我需要将一个字符串值传递给 customerApplicationManagement 页面,指示我来自哪个页面,以便在选择应用程序后,我可以返回该页面。我已经尝试了几个关于如何传递这个值的建议,包括f:paramf:viewParam。我什至尝试将其直接添加到 url (?fromPage=funding) 等,但它们似乎只有在将值传递回当前页面而不是我要导航到的新页面时才起作用。

谁能告诉我如何才能最好地实现这一点。

【问题讨论】:

    标签: jsf parameters


    【解决方案1】:

    使用&lt;f:param&gt;&lt;f:viewParam&gt;

    来源页面:

    <p:commandLink styleClass="toolbar" 
               action="/application/customerApplicationManagement.jsf">
        <p:graphicImage url="/resources/gfx/search.png" />
        <h:outputText value="#{msg.menu_searchApplications}" styleClass="toolbarLink" />
        <f:param name="fromPage" value="funding.xhtml" />
    </p:commandLink>
    

    目标页面(绑定):

    <f:metadata>
        <f:viewParam name="fromPage" value="#{destinationBacking.fromPage}" />
    </f:metadata />
    
    <h:link value="Go back!" outcome="#{destinationBacking.fromPage}" />
    

    目标页面(未绑定):

    <f:metadata>
        <f:viewParam name="fromPage" />
    </f:metadata />
    
    <h:link value="Go back!" outcome="fromPage" />
    

    支持 bean(仅当您想绑定参数时):

    @ManagedBean
    @ViewScoped
    public class DestinationBacking{
        String fromPage;
    
        public String getFromPage(){
            return fromPage;
        }
    
        public void setFromPage(String frompage){
            fromPage = frompage;
        }
    }
    

    您的视图路径将从目标支持 bean 绑定到 fromPage 属性,之后您可以使用它返回到原始页面。

    另外我想说的是,这种方式对最终用户来说有点“可破解”,我的意思是,你通过纯 url 传递原始路径。另请参阅实现此目的的其他方法,例如 flash scope,如果您正在使用 @ViewScoped bean,这将非常有用。

    【讨论】:

    • 注意funding.xhtml很有可能会导致错误的位置。最好将#{view.viewId} 作为参数值。此外,在这种情况下,接收页面上不需要支持 bean。
    • funding.xhtml 是 OP 告诉的位置,这就是我使用它的原因。关于目标绑定,没有必要,但我通常将我的值绑定到支持 bean。然而,即使参数未绑定,OP 也需要一个目标支持 bean 来管理接收页面逻辑。
    【解决方案2】:

    我不知道您尝试实现目标的具体方法,因此我们无法判断它们有什么问题,但如果我们认为您的代码“原样”,您就没有任何东西 将传递你想要的字符串。

    不要重复我们自己,这里有很多专门用于使用这种或那种方法的答案,所以在我看来,我当然会给你最好的参考。

    1. How can I pass a parameter to a commandlink inside a datatable;
    2. ViewParam vs @ManagedProperty;
    3. What can &lt;f:metadata&gt; and &lt;f:viewParam&gt; be used for

    关于 JSF 中后退按钮的使用,您还可以查看我在 How to get back to the same page in JSF 上的回答。

    顺便说一句,使用 POST 进行页面到页面导航被认为是一种不好的做法。如果您只需要导航到另一个页面,您最好使用普通的&lt;h:link&gt;&lt;h:button&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      • 1970-01-01
      • 2012-09-18
      相关资源
      最近更新 更多