【问题标题】:JSF page onload executes button clickJSF 页面 onload 执行按钮单击
【发布时间】:2014-09-06 20:27:03
【问题描述】:

我有一个以下 JSF 页面,我检查用户是否已登录 body onload 事件。

    <h:body onload="#{adminManagedBean.adminIsLoggedIn()}">
    <div id="top-bar" class="pure-g">
        <div class="pure-u-1-2">
            <img src="images/logo.png" border="0" style="margin-left: 20px;"/>
        </div>
        <div class="pure-u-1-2">
            <div class="pure-menu pure-menu-open pure-menu-horizontal">
                <ul>
                    <li><a href="addProduct.xhtml">Add product</a></li>
                    <li><a href="products.xhtml">Products</a></li>
                    <li><a href="orders.xhtml">Orders</a></li>
                    <li><h:button value="Logout" onclick="#{adminManagedBean.logoutUser()}"></h:button></li>

我的问题是为什么页面加载时用户会自动注销?我调试了应用程序并在打开页面时调用了 logoutUser 方法,即使未单击按钮也是如此。 adminIsLoggedIn() 方法中未调用 logoutUser 方法。如果用户未登录,adminIsLoggedIn 只是简单地重定向页面。

【问题讨论】:

  • 你有过滤器吗?
  • 没有。过滤器是什么意思?

标签: jsf onclick onload


【解决方案1】:

您将 javascript 属性与服务器端属性混淆了。例如。 onclick 是点击组件时执行的 javascript。

您的情况是onclick="#{adminManagedBean.logoutUser()}" 在服务器端评估adminManagedBean.logoutUser() 导致注销。

如果你使用它会被修复:

<h:commandButton value="Logout" action="#{adminManagedBean.logoutUser()}"/>

你也在你的 h:body 上滥用 onload

【讨论】:

  • 我还能在哪里检查用户是否已登录?
  • 在显示页面前是否需要检查他是否已登录?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
  • 2013-02-04
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多