gpt4 book ai didi

jsf - JSF 2和发布/重定向/获取?

转载 作者:行者123 更新时间:2023-12-03 11:40:51 24 4
gpt4 key购买 nike

如果我写错了,请纠正我,但我认为我的所有非AJAX提交都应使用“发布/重定向/获取(PRG)”方式,因为GET应该用于刷新/查询数据,在我的情况下,我能想到的应用程序页面实际上仅会更新数据,然后刷新页面,因此我认为PRG适合此处。

我相信我可以使用faces-config.way来执行此操作,在其中我可以使用<redirect/>,也可以使用return "myview.xhtml?faces-redirect=true";
现在的问题是..

我有什么办法可以全局配置该配置,以便非AJAX调用/提交可以自动使用faces-redirect = true,这样我的源代码就这么简单:

return "myview";

最佳答案

您可以使用自定义 ConfigurableNavigationHandler 进行此操作。这是一个启动示例:

package com.example;

import java.util.Map;
import java.util.Set;

import javax.faces.application.ConfigurableNavigationHandler;
import javax.faces.application.NavigationCase;
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;

public class RedirectNavigationHandler extends ConfigurableNavigationHandler {

private NavigationHandler parent;

public RedirectNavigationHandler(NavigationHandler parent) {
this.parent = parent;
}

@Override
public void handleNavigation(FacesContext context, String from, String outcome) {
if (!outcome.endsWith("?faces-redirect=true")) {
outcome += "?faces-redirect=true";
}

parent.handleNavigation(context, from, outcome);
}

@Override
public NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome) {
if (parent instanceof ConfigurableNavigationHandler) {
return ((ConfigurableNavigationHandler) parent).getNavigationCase(context, fromAction, outcome);
} else {
return null;
}
}

@Override
public Map<String, Set<NavigationCase>> getNavigationCases() {
if (parent instanceof ConfigurableNavigationHandler) {
return ((ConfigurableNavigationHandler) parent).getNavigationCases();
} else {
return null;
}
}

}

faces-config.xml中注册如下:
<application>
<navigation-handler>com.example.RedirectNavigationHandler</navigation-handler>
</application>

关于jsf - JSF 2和发布/重定向/获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5416070/

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