pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

如何使用 JSF 和導航規則創建帶參數的 GET 請求

How to create a GET request with parameters, using JSF and navigation-rules?(如何使用 JSF 和導航規則創建帶參數的 GET 請求?)
本文介紹了如何使用 JSF 和導航規則創建帶參數的 GET 請求?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

有沒有辦法使用 h:outputLink、其他 JSF 標記或代碼創建帶有請求參數的非面孔請求 (HTTP GET) 的 html 鏈接?

Is there a way to create an html link using h:outputLink, other JSF tag or code to create a non faces request (HTTP GET) with request parameters?

例如我有以下導航規則

<navigation-rule>
    <navigation-case>
        <from-outcome>showMessage</from-outcome>
        <to-view-id>/showMessage.jsf</to-view-id>
        <redirect/>
    </navigation-case>
</navigation-rule>

在我的頁面中,我想輸出以下 html 代碼:

In my page I would like to output the following html code:

<a href="/showMessage.jsf?msg=23">click to see the message</a>

我可以只在頁面中編寫 html 代碼,但我想使用導航規則以便將所有 url 定義在一個可配置文件中.

I could just write the html code in the page, but I want to use the navigation rule in order to have all the urls defined in a single configurable file.

推薦答案

這是一個有趣的想法.我很想知道它在實踐中的表現如何.

This is an interesting idea. I'd be curious to know how it pans out in practice.

獲取導航規則

導航由 處理導航處理程序.掌握 NavigationHandler 并不難,但 API 不會公開它使用的規則.

Navigation is handled by the NavigationHandler. Getting hold of the NavigationHandler isn't difficult, but the API does not expose the rules it uses.

在我看來,你可以:

  1. 在初始化時解析 faces-config.xml 并將規則存儲在應用程序上下文中 (easy)
  2. 實現您自己的 NavigationHandler 忽略 faces-config.xml 中的規則或用您自己的規則文件補充它們并以某種方式公開其規則集(可行,但需要一些工作)
  3. 模擬你自己的 FacesContext 并將其傳遞給現有的導航處理程序(真的很難讓兩個 FacesContext 對象在同一個線程中共存并且效率極低)
  1. parse faces-config.xml on initialization and store the rules in the application context (easy)
  2. implement your own NavigationHandler that ignores the rules in faces-config.xml or supplements them with your own rules file and exposes its ruleset somehow (workable, but takes a bit of work)
  3. mock your own FacesContext and pass it to the existing navigation handler (really difficult to make two FacesContext object coexist in same thread and extremely inefficient)

現在,您還有另一個問題.您要將映射保存在哪里以查找視圖?將它們硬編碼在 bean 中?

Now, you have another problem too. Where are you going to keep the mappings to look up the views? Hard-code them in the beans?

使用導航規則

順便說一句,我可以想到兩種方法可以從后端構造包含參數的 URL.兩者都涉及定義某種 bean.

Off hand, I can think of two ways you could construct parameter-containing URLs from the back-end. Both involve defining a bean of some kind.

<managed-bean>
    <managed-bean-name>navBean</managed-bean-name>
    <managed-bean-class>foo.NavBean</managed-bean-class>
    <managed-bean-scope>application</managed-bean-scope>
</managed-bean>

來源:

package foo;

import java.io.IOException;
import java.io.Serializable;
import java.net.URLEncoder;

import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

public class NavBean implements Serializable {

    private String getView() {
        String viewId = "/showMessage.faces"; // or look this up somewhere
        return viewId;
    }

    /**
     * Regular link to page
     */
    public String getUrlLink() {
        FacesContext context = FacesContext.getCurrentInstance();
        ExternalContext extContext = context.getExternalContext();
        String viewId = getView();
        String navUrl = context.getExternalContext().encodeActionURL(
                extContext.getRequestContextPath() + viewId);
        return navUrl;
    }

    /**
     * Just some value
     */
    public String getValue() {
        return "" + System.currentTimeMillis();
    }

    /**
     * Invoked by action
     */
    public String invokeRedirect() {
        FacesContext context = FacesContext.getCurrentInstance();
        ExternalContext extContext = context.getExternalContext();
        String viewId = getView();
        try {
            String charEncoding = extContext.getRequestCharacterEncoding();
            String name = URLEncoder.encode("foo", charEncoding);
            String value = URLEncoder.encode(getValue(), charEncoding);
            viewId = extContext.getRequestContextPath() + viewId + '?' + name
                    + "=" + value;
            String urlLink = context.getExternalContext().encodeActionURL(
                    viewId);
            extContext.redirect(urlLink);
        } catch (IOException e) {
            extContext.log(getClass().getName() + ".invokeRedirect", e);
        }
        return null;
    }

}

獲取

對于 GET 請求,您可以使用 UIParameters 設置值并讓渲染器構建參數列表.

For a GET request, you can use the UIParameters to set the values and let the renderer build the parameter list.

<h:outputLink value="#{navBean.urlLink}">
    <f:param name="foo" value="#{navBean.value}" />
    <h:outputText value="get" />
</h:outputLink>

發布

如果您想在 POST 操作期間將 URL 設置為視圖,您可以在操作中使用重定向(由按鈕或 commandLink 調用).

If you want to set the URL to a view during a POST action, you can do it using a redirect in an action (invoked by a button or commandLink).

<h:commandLink id="myCommandLink" action="#{navBean.invokeRedirect}">
    <h:outputText value="post" />
</h:commandLink>

備注

請注意 ExternalContext.encodeActionURL 用于對字符串進行編碼.這是生成可跨上下文(portlet 等)移植的代碼的良好實踐.如果您正在對圖像或下載文件的鏈接進行編碼,則可以使用 encodeResourceURL.

Note that ExternalContext.encodeActionURL is used to encode the string. This is good practice for producing code that is portable across contexts (portlets, etcetera). You would use encodeResourceURL if you were encoding a link to an image or download file.

這篇關于如何使用 JSF 和導航規則創建帶參數的 GET 請求?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Java Remove Duplicates from an Array?(Java從數組中刪除重復項?)
How to fix Invocation failed Unexpected Response from Server: Unauthorized in Android studio(如何修復調用失敗來自服務器的意外響應:在 Android 工作室中未經授權)
AES encryption, got extra trash characters in decrypted file(AES 加密,解密文件中有多余的垃圾字符)
AES Error: Given final block not properly padded(AES 錯誤:給定的最終塊未正確填充)
Detecting incorrect key using AES/GCM in JAVA(在 JAVA 中使用 AES/GCM 檢測不正確的密鑰)
AES-256-CBC in Java(Java 中的 AES-256-CBC)
主站蜘蛛池模板: 99文库_实习生实用的范文资料文库站 | 杭州中策电线|中策电缆|中策电线|杭州中策电缆|杭州中策电缆永通集团有限公司 | 煤棒机_增碳剂颗粒机_活性炭颗粒机_木炭粉成型机-巩义市老城振华机械厂 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 屏蔽服(500kv-超高压-特高压-电磁)-徐吉电气 | 圆形振动筛_圆筛_旋振筛_三次元振动筛-河南新乡德诚生产厂家 | 集装箱标准养护室-集装箱移动式养护室-广州璟业试验仪器有限公司 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 模具硅橡胶,人体硅胶,移印硅胶浆厂家-宏图硅胶科技 | 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 密集架-手摇-智能-移动-价格_内蒙古档案密集架生产厂家 | 环氧铁红防锈漆_环氧漆_无溶剂环氧涂料_环氧防腐漆-华川涂料 | 铝镁锰板_铝镁锰合金板_铝镁锰板厂家_铝镁锰金属屋面板_安徽建科 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 脉冲除尘器,除尘器厂家-淄博机械| 油液红外光谱仪-油液监测系统-燃油嗅探仪-上海冉超光电科技有限公司 | 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 菏泽商标注册_菏泽版权登记_商标申请代理_菏泽商标注册去哪里 | 聚氨酯复合板保温板厂家_廊坊华宇创新科技有限公司 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | 贴片电感_贴片功率电感_贴片绕线电感_深圳市百斯特电子有限公司 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | 定制异形重型钢格栅板/钢格板_定做踏步板/排水沟盖板_钢格栅板批发厂家-河北圣墨金属制品有限公司 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | STRO|DTRO-STRO反渗透膜(科普)_碟滤 | 螺旋叶片_螺旋叶片成型机_绞龙叶片_莱州源泽机械制造有限公司 | POS机办理_个人pos机免费领取-银联pos机申请首页 | 超声波焊接机,振动摩擦焊接机,激光塑料焊接机,超声波焊接模具工装-德召尼克(常州)焊接科技有限公司 | 贵州自考_贵州自学考试网 | 西安展台设计搭建_西安活动策划公司_西安会议会场布置_西安展厅设计西安旭阳展览展示 | 广西教师资格网-广西教师资格证考试网 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 桑茶-七彩贝壳桑叶茶 长寿茶 | 体视显微镜_荧光生物显微镜_显微镜报价-微仪光电生命科学显微镜有限公司 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 高光谱相机-近红外高光谱相机厂家-高光谱成像仪-SINESPEC 赛斯拜克 | 鲁尔圆锥接头多功能测试仪-留置针测试仪-上海威夏环保科技有限公司 | 面粉仓_储酒罐_不锈钢储酒罐厂家-泰安鑫佳机械制造有限公司 | 沥青车辙成型机-车托式混凝土取芯机-混凝土塑料试模|鑫高仪器 | 手术室净化厂家_成都实验室装修公司_无尘车间施工单位_洁净室工程建设团队-四川华锐16年行业经验 |