我有了被查詢後設置從一個onclick一個的loggedIn布爾的AdminBean:因爲我想做一個不同的JavaScript事情JSF F:阿賈克斯的OnEvent不讀書豆值
<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>
我需要這個基於用戶是否成功登錄。首先點擊命令按鈕(顯然),然後登錄設置爲true。我有這個明確我AdminBean類:
public boolean isLoggedIn() {
System.out.println(loggedIn);
return loggedIn;
}
本來我有一個OnEvent所有嵌套像onevent="#{adminBean.loggedIn} ? yesFunction : noFunction
,但這並沒有工作。所以我四處看了看,發現 http://fyhao.com/2010/05/computer-and-it/java/java-server-faces/jsf-2-fajax-why-execute-onevent-three-times/ 所以我決定把它分解成一個內聯函數,但是這仍然不起作用。
然後,我決定去我上面發佈的東西,除了清楚的警報聲明,以什麼JavaScript認爲值是什麼(和我的印刷線,看看他們是否同意...)
Java控制檯,由第一次警報(它是e.status=='complete'
),首先打印出很多錯誤,然後打印出很多trues。
JavaScript提醒爲false。
然後清除控制檯並在警報上單擊確定。控制檯然後打印什麼也沒有,並且第二個警報被調用,仍然是錯誤的。所以我的JavaScript失敗了。
現在我注意到另一個奇怪的事情...... AdminBean是會話作用域。當我再次按下地址欄中的輸入時,無論我做什麼,JavaScript都會提示真實...即使呈現仍然正常工作(即使JavaScript警報true
未顯示登錄時也應呈現的內容) 。
這是怎麼回事?
如果您需要更多信息/代碼,請詢問。
編輯#1:
當我在上面,我試圖onevent="#{adminBean.loggedIn} ? yesFunction : noFunction
, 我也試過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>
這可能是一個駭人的做法,但它的工作原理。
最初我有'onevent =「#{adminBean.loggedIn}?first:second」,它位於f:ajax中,它重新呈現它所在的窗體。我不知道爲什麼這是行不通的。然而......我正在工作,現在已經完成了基本上完全按照您的建議進行測試的內容(在我看到您的評論之前)。我將編輯我的代碼以發佈解決方案。儘管第一種方法爲什麼不起作用? – twmb 2012-04-19 11:27:56