第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

重定向和導(dǎo)航/前進(jìn)有什么區(qū)別,什么時候使用什么?

重定向和導(dǎo)航/前進(jìn)有什么區(qū)別,什么時候使用什么?

重定向和導(dǎo)航/前進(jìn)有什么區(qū)別,什么時候使用什么?JSF中的導(dǎo)航有什么區(qū)別?FacesContext context = FacesContext.getCurrentInstance();context.getApplication().getNavigationHandler(). handleNavigation(context, null, url);重定向HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext(). getResponse();response.sendRedirect(url);以及如何決定什么時候使用什么?導(dǎo)航的問題是頁面URL不會更改,除非faces-redirect=true添加到導(dǎo)航URL的查詢字符串中。然而,在我的案例中faces-redirect=true如果我想重定向到非JSF頁面(就像普通的HTML頁面),就會拋出錯誤。另一種選擇是BalusC建議在JSF2.0重定向錯誤
查看完整描述

1 回答

?
www說

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個贊

首先,“重定向”一詞在web開發(fā)世界中是指向客戶機(jī)發(fā)送一個空HTTP響應(yīng)的動作,只需要一個Location其中包含新URL的標(biāo)頭,客戶端必須在該URL上發(fā)送全新的GET請求。所以基本上:

  • 客戶端發(fā)送HTTP請求到

    somepage.xhtml.

  • 服務(wù)器將HTTP響應(yīng)發(fā)送回

    Location: newpage.xhtml

    標(biāo)頭
  • 客戶端發(fā)送HTTP請求到

    newpage.xhtml

    (這反映在瀏覽器地址欄中!)
  • 服務(wù)器發(fā)送HTTP響應(yīng),內(nèi)容為

    newpage.xhtml.

您可以使用WebBrowser的內(nèi)置/addonDeveloper工具集來跟蹤它。在Chrome/IE9/Firebug中按F12并檢查“網(wǎng)絡(luò)”部分來查看它。

JSF導(dǎo)航處理程序不發(fā)送重定向。相反,它使用目標(biāo)頁面的內(nèi)容作為HTTP響應(yīng)。

  • 客戶端發(fā)送HTTP請求到

    somepage.xhtml.

  • 服務(wù)器發(fā)送HTTP響應(yīng),內(nèi)容為

    newpage.xhtml.

但是,由于最初的HTTP請求是somepage.xhtml,瀏覽器地址欄中的URL保持不變。如果您熟悉BASIC Servlet API,那么您應(yīng)該明白,這與RequestDispatcher#forward().


關(guān)于是否拉著.HttpServletResponse在JSF引擎下調(diào)用sendRedirect()這是正確的用法;不,這不是正確的用法。你的服務(wù)器日志會被弄得亂七八糟的IllegalStateException因?yàn)檫@樣您就不會告訴JSF您已經(jīng)接管了響應(yīng)處理的控制,因此JSF不應(yīng)該做它的默認(rèn)響應(yīng)處理工作。實(shí)際上你應(yīng)該執(zhí)行FacesContext#responseComplete()之后。

而且,每次您需要從javax.servlet.*在JSF工件中包(如托管bean),您應(yīng)該完全停止編寫代碼,如果您真的以正確的方式做事,應(yīng)該三思而后問自己,對于您想要達(dá)到的目標(biāo),是否已經(jīng)有了“標(biāo)準(zhǔn)JSF方法”,和/或任務(wù)是否真的屬于JSF管理bean(也就是有些情況下,簡單的JSF方法)Servlet過濾器會是個更好的地方)。

在JSF中執(zhí)行重定向的正確方法是使用faces-redirect=true操作結(jié)果中的查詢字符串:

public String submit() {
    // ...
    return "/newpage.xhtml?faces-redirect=true";}

或使用ExternalContext#redirect()當(dāng)您不在動作方法(如Ajax或預(yù)發(fā)布監(jiān)聽器方法)中時:

public void listener() throws IOException {
    // ...
    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    ec.redirect(ec.getRequestContextPath() + "/newpage.xhtml");}

(是的,你不需要把try-catch繞著它IOException,就讓這個例外過去吧throws,服務(wù)器容器將處理它)

或使用NavigationHandler#handleNavigation()在特定情況下,如果您使用XML導(dǎo)航案例和/或帶有內(nèi)置監(jiān)聽器的自定義導(dǎo)航處理程序:

public void listener() {
    // ...
    FacesContext fc = FacesContext.getCurrentInstance();
    NavigationHandler nh = fc.getApplication().getNavigationHandler();
    nh.handleNavigation(fc, null, "/newpage.xhtml?faces-redirect=true");}

至于導(dǎo)航處理程序?yàn)槭裁床荒芴幚怼捌胀℉TML”文件,這只是因?yàn)閷?dǎo)航處理程序只能處理JSF視圖,而不能處理其他文件。你應(yīng)該用ExternalContext#redirect()然后。

另見:


查看完整回答
反對 回復(fù) 2019-07-10
  • 1 回答
  • 0 關(guān)注
  • 525 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號