Javascript JSF:ajaxonevent未读取bean值
我有一个AdminBean,它有一个loggedIn布尔值,它是在onclick的查询之后设置的: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
<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>