gpt4 book ai didi

java - 如何使用重定向使方法返回 null

转载 作者:太空宇宙 更新时间:2023-11-04 15:13:28 24 4
gpt4 key购买 nike

在 jsf 中,我想返回到同一页面,但需要重定向。因此,如果用户单击刷新,我不希望再次提交表单。

public String changeLanguage() {
if (locale == Locale.ENGLISH)
locale = new Locale("ar");
else
locale = Locale.ENGLISH;
return null;
}

查看代码:-mybean session 范围

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui"
xmlns:m="http://medicalgate.com/facelets" xmlns:h="http://java.sun.com/jsf/html">

<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>#{msg.hello}</title>
</h:head>
<h:body>
<f:view locale="#{mybean.locale}">
<h:form>
<h:commandLink value="lang" action="#{mybean.changeLanguage}"></h:commandLink>
</h:form>
</f:view>
</h:body>
</html>

最佳答案

不幸的是,这个问题的答案并不像乍看起来那么简单。 JSF 是一个很大程度上基于有状态的框架,而您想要的 P-R-G 模式不能很好地适应它。

如果您绝对必须这样做,那么您将需要对您的 bean 请求进行限定范围并使用 View 参数来保存状态。

本质上,您需要进行以下更改:

<小时/>

MyBean.java

@RequestScoped
public class MyBean {
public string submit() {
String outcome = "MyView?faces-redirect=true&includeViewParams=true";
return outcome;
}
/* Bean goes here */
}
<小时/>

MyView.jsf

<html>
<f:metadata>
<f:viewParam name="fname" value="#{myBean.firstName}"/>
</f:metadata>
<h:body>
<h:form>
<h:inputText value="#{myBean.firstName}"/>
<h:commandButton value="Submit" action="#{myBean.submit}"/>
</h:form>
</h:body>
<小时/>

不幸的是,这有一个缺点,那就是你的参数将被放入 GET 参数中 (http://mysite/MyView.jsf?fname=test),但你的页面不会也有回发问题。

因此,您需要做出权衡,是用有状态来打破后退按钮,还是用无状态和额外的工作来对抗 JSF 的有状态性质以避免回发。

关于java - 如何使用重定向使方法返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21101775/

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