【发布时间】:2022-02-24 23:46:34
【问题描述】:
如何将以下内容从链接转换为按钮?
<h:outputLink value="#{request.contextPath}/j_spring_security_logout">Logout</h:outputLink>
如果我尝试添加导航规则,它会找不到 j_spring_security_logout...
【问题讨论】:
标签: jsf spring-security
如何将以下内容从链接转换为按钮?
<h:outputLink value="#{request.contextPath}/j_spring_security_logout">Logout</h:outputLink>
如果我尝试添加导航规则,它会找不到 j_spring_security_logout...
【问题讨论】:
标签: jsf spring-security
要么使用 CSS 来设置链接的样式,使其看起来像一个按钮。
<h:outputLink styleClass="button">
类似的东西
a.button {
display: inline-block;
background: lightgray;
border: 2px outset lightgray;
cursor: default;
}
a.button:active {
border-style: inset;
}
或引入一个普通的 HTML 表单:
<form action="#{request.contextPath}/j_spring_security_logout">
<input type="submit" value="Logout">
</form>
【讨论】:
另一种解决方案是:
<p:button value="Logout with spring" outcome="logout"></p:button>
别忘了设置它。
faces-config.xml
<navigation-rule>
<from-view-id>/your/path/index.xhtml</from-view-id>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/j_spring_security_logout?faces-redirect=true</to-view-id>
</navigation-case>
</navigation-rule>
如果您忘记添加“?faces-redirect=true”,则会收到错误消息。因为您被重定向到“http://localhost/projectNmae/j_spring_security_logout.xhtml”。所以您应该使用它
如果你想使用“p:commandButton”
,您必须使用 managedBean 返回结果。
( return "logout"; )
【讨论】:
对于与我相同情况的任何未来读者,如果您正在使用:
您想使用<p:commandButton> 而不是普通的<input> 来利用primeface 的styleClass 进行按钮样式:
要触发spring-security的默认注销端点/logout,您可以在commandButton的oncomplete属性中执行以下自定义jquery命令:
// One line version
oncomplete="$.ajax('/logout').then(() => {let dest = window.location.origin + '/login.xhtml'; window.location.href = dest; });"
// Explanation
// Send request to spring security's logout end point
$.ajax("/logout").then(
() => {
// Your login page destination
let dest = window.location.origin + "/login.xhtml";
// Refresh the browser using the login destination
window.location.href = dest;
}
);
注销按钮将同时工作并看起来很棒:)
【讨论】: