Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSF:ajaxonevent未读取bean值_Javascript_Jsf_Javabeans - Fatal编程技术网

Javascript JSF:ajaxonevent未读取bean值

Javascript JSF:ajaxonevent未读取bean值,javascript,jsf,javabeans,Javascript,Jsf,Javabeans,我有一个AdminBean,它有一个loggedIn布尔值,它是在onclick的查询之后设置的: <h:commandButton rendered="#{!adminBean.loggedIn}" styleClass="moreButtonAsText" id="adminLoginAsText" value="Login" action="#{adminBean.logIn}"> <f:ajax render="detailsBox adminFor

我有一个AdminBean,它有一个loggedIn布尔值,它是在onclick的查询之后设置的:

    <h:commandButton rendered="#{!adminBean.loggedIn}" styleClass="moreButtonAsText" id="adminLoginAsText" value="Login" action="#{adminBean.logIn}">
      <f:ajax render="detailsBox adminForm" execute="@form" onevent="onevent"/>
    </h:commandButton>

  </h:form>
</div>

<script type="text/javascript">
  function onevent(e){
    if(e.status=='success') {
      alert(#{adminBean.loggedIn});
    } 
    if(e.status=='complete') {
      alert(#{adminBean.loggedIn});
    } 
  }
</script>
最初我将OneEvent全部嵌套为
OneEvent=“#{adminBean.loggedIn}?yesFunction:noFunction
,但这不起作用。因此我四处阅读并发现 所以我决定将其拆分为一个内联函数,但这仍然不起作用。
然后我决定继续我上面发布的内容,除了关于JavaScript认为值是什么的明确警告语句(以及我的打印行,看看它们是否同意…)

Java控制台通过第一个警报(即
e.status==“complete”
)首先打印出许多错误,然后打印出许多真实的错误。
JavaScript警报为false

然后我清除控制台并单击警报上的ok。然后控制台不打印任何内容,第二个警报被调用,仍然为false。因此我的JavaScript失败

现在我注意到另一件奇怪的事情…AdminBean是会话范围。当我再次在地址栏中按enter键时,无论我做什么,JavaScript都会提示true…即使呈现仍然正常工作(应该只在登录时呈现的内容没有显示,即使JavaScript提示
true

到底发生了什么事

如果您需要更多信息/代码,请询问

编辑#1:

当我在上面说我尝试了
onevent=“#{adminBean.loggedIn}?是功能:无功能
, 我还尝试了
onevent=“#{adminBean.loggedIn}?yesFunction:noFunction
。我意识到这些函数上可能缺少引号/撇号,但在解决该问题之前,我希望修复adminBean.loggedIn问题

编辑#2:

查看所选答案;我正在研究此解决方案,然后答案基本上证实了我的结果

<h:form id="javascriptHack">
  <h:form id="hiddenJS" rendered="#{adminBean.loggedIn}" >
    <script type="text/javascript">
      $(function() {
        (#{adminBean.loggedIn}) ? slowCloseAdminPanel() : adminPanelLeftOpen();
      });
    </script>
  </h:form>
</h:form>

$(函数(){
(#{adminBean.loggedIn})?slowCloseAdminPanel():adminPanelLeftOpen();
});

这可能是一种黑客方式,但它可以工作。

这是因为您的ajax请求没有更新脚本。它仍将保留初始值。您可以将脚本放入
中。这应该可以工作。

最初我有'onevent=“#{adminBean.loggedIn}?first:second”,这是在f:ajax中,它正在重新呈现它所包含的表单。我不知道为什么这不起作用。但是……我正在工作,现在已经完成了测试,基本上就是您建议的(在我看到您的评论之前)。我将编辑我的代码以发布解决方案。不过,为什么第一个方法不起作用?
<h:form id="javascriptHack">
  <h:form id="hiddenJS" rendered="#{adminBean.loggedIn}" >
    <script type="text/javascript">
      $(function() {
        (#{adminBean.loggedIn}) ? slowCloseAdminPanel() : adminPanelLeftOpen();
      });
    </script>
  </h:form>
</h:form>