tl; dr:我的问题实际上可以恢复到如何通过字符串刷新页面(当没有知道参数时)?
我有两种方案可以登录用户:
例如:
<!-- user connected -->
<p:commandButton action="#{pollVoteBean.vote}" value="#{strings.Vote}" rendered="#{userNav.isUserConnected}"/>
<!-- user disconnected -->
<h:panelGroup rendered="#{!userNav.isUserConnected}">
<p:commandButton type="button" value="#{strings.Vote}" onclick="PF('regSign').show()"/>
<!-- if the user clicks here a log in dialog appears and he can log in. -->
</h:panelGroup>
当未经身份验证的用户点击时会出现:
这是我在登录页面上使用的重定向用户:
lastUrl = getCorrectUrl(((String) FacesContext.getCurrentInstance()
.getExternalContext().getRequestMap()
.get(RequestDispatcher.FORWARD_REQUEST_URI)));
if (null != lastUrl && !"/signin".equals(lastUrl))
return lastUrl + "?faces-redirect=true";
else
return "/news?faces-redirect=true";
但是对于我要刷新页面的对话框。如何更改上面的代码,以便处理这两种情况?
我差不多了,但我无法获得带参数的正确网址(当然这是未知数):
lastUrl = getCorrectUrl(((String) FacesContext.getCurrentInstance()
.getExternalContext().getRequestMap()
.get(RequestDispatcher.FORWARD_REQUEST_URI)));
currentUrl = FacesContext.getCurrentInstance().getViewRoot()
.getViewId();
if ("/signin".equals(currentUrl)) {
if (null != lastUrl && !"/signin".equals(lastUrl))
return lastUrl + "?faces-redirect=true";
else
return "/news?faces-redirect=true";
} else {
return currentUrl + "?faces-redirect=true";
}
(上述代码假设用户已正确验证)。
我的对话框也是dynamic="true"
。
答案 0 :(得分:0)
我最终将方法分成两部分,因为我发现没有简单的方法可以做到这一点。
public String signInUser() {
if (trySignIn()) {
if (null != lastUrl && !"/signin".equals(lastUrl))
return lastUrl + "?faces-redirect=true";
else
return "/news?faces-redirect=true";
} else {
return "signin.xhtml?faces-redirect=true";
}
}
public void signInFromDlg() {
trySignIn();
}
然后javascript刷新oncomplete。