gpt4 book ai didi

jsf - h :commandButton action redirect to context root, 可能吗?

转载 作者:行者123 更新时间:2023-12-04 19:18:33 25 4
gpt4 key购买 nike

项目背景

我从头开始创建了一个包含两个主要组件的 URL 重写:

public class URLFilter implements Filter
{
...
}

public class URLViewHandler extends GlobalResourcesViewHandler
{
...
}

第一个类用于将 clean URL 转发到每个页面具有不同 ID 的右 View 。第二个类覆盖函数 getActionURL() 以便 h:form 和 ajax 函数继续工作。

这些类(class)的翻译如下:

Real URL                 Internal URL
/ <-> page.jspx?key=1
/contact <-> page.jspx?key=2
/projects/management <-> page.jspx?key=3
etc

当前解决方案

我现在的问题是我的用户登录和注销按钮:

<!-- Login button used if user is not logged, go to a secured page (which display error message). If he log with this button, the current page is reloaded and displayed properly. This button works perfectly -->
<h:commandButton rendered="#{pageActions.item.isPrivate}" value="#{msg.button_connect}" actionListener="#{userActions.onButtonLoginClick}" />
<!-- Login button used anywhere on public pages that redirect to user home after login, works perfectly since I haven't changed to clear url. -->
<h:commandButton rendered="#{not pageActions.item.isPrivate}" value="#{msg.button_connect}" actionListener="#{userActions.onButtonLoginClick}" action="userHome.jspx?faces-redirect=true" />
<!-- Logout button that works (it redirects at http://website.com/context-name/ but keep the ?key=1 at the end. -->
<h:commandButton value="#{msg.button_disconnect}" actionListener="#{userActions.onButtonLogoutClick}" action="page.jspx?key=1&amp;faces-redirect=true" styleClass="button" style="margin-left: 5px;" />

我的愿望

我的问题:有没有更好的方法来编写注销按钮,因为我需要重定向到上下文根,目前我正在使用带有主页键的 View 名称,但我更喜欢 1. 使用真实路径 2 . 不要在 url 上保留 ?key=1。

谢谢!

最终代码

基于 BalusC 的回答,这是我与他人分享的最终代码:

@ManagedBean
@RequestScoped
public class NavigationActions
{
public void redirectTo(String p_sPath) throws IOException
{
ExternalContext oContext = FacesContext.getCurrentInstance().getExternalContext();

oContext.redirect(oContext.getRequestContextPath() + p_sPath);
}
}

<h:commandButton rendered="#{not pageActions.item.isPrivate}" value="#{msg.button_connect}" actionListener="#{userActions.onButtonLoginClick}" action="#{navigationActions.redirectTo(userSession.language.code eq 'fr' ? '/profil/accueil' : '/profile/home')}" />

既然有了路径就不需要 key 了,那就更好了,再次感谢BalusC让我走上正轨!送了一小笔捐款:)

最佳答案

这对于(隐式)导航是不可能的。 / 很遗憾不是有效的 JSF View ID。

使用 ExternalContext#redirect()反而。替换

action="page.jspx?key=1&amp;faces-redirect=true"

通过

action="#{userActions.redirectToRootWithKey(1)}"

public void redirectToRootWithKey(int key) throws IOException {
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.redirect(ec.getRequestContextPath() + "?key=" + key);
}

关于jsf - h :commandButton action redirect to context root, 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13449660/

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