我不知道如果我嘗試完成所有可能的事情,所以我會很感激任何幫助。 我基本上試圖做的是創建一個在線跳棋遊戲,用戶可以在這裏互相競爭或計算機。遊戲的邏輯是在EJB內部的,到目前爲止它工作正常。到目前爲止,我已經完成了玩家電腦遊戲,並且它運行良好 - 玩家選擇移動的起點和終點(而邏輯決定它們是否有效),然後計算機移動它,然後更新棋盤。然而,目前有兩個問題,我想解決: 1)我希望電腦的舉動發生在玩家完成後大約一秒鐘。它的工作原理 - 但是板子沒有更新(我會在後面解釋爲什麼) 2)電腦移動後,我想讓它影響的方塊閃爍幾次。jsf 2延遲+閃爍後更新bean的UI
我的船上,每平方米是一個命令按鈕,如下所示:
<h:commandButton id="B1" image="#{CodeBean.imgSrc}" actionListener="#{CodeBean.clickImg()}" action="#{CodeBean.update}" onmouseover="this.src='#{CodeBean.overImgSrc}'" onmouseout="this.src='/CheckersClientSide#{CodeBean.imgSrc}'">
<f:ajax render="@form" />
</h:commandButton>
在我的豆
,在 'IMGSRC' 消氣看起來是這樣的:
public String getImgSrc()
{
FacesContext fc = FacesContext.getCurrentInstance();
UIComponent c = UIComponent.getCurrentComponent(fc);
String cID = c.getId();
String output = "/resources/EMPTY_BOX.jpg";
String currOption = gameBoard.get(cID);
if (currOption != null)
{
output = "/resources/" + currOption + ".jpg";
}
return output;
}
在「clickImg '功能內部的豆,我檢查是否有任何廣場已被挑選,否則我知道廣場被選爲移動的起源;否則,我調用EJB的移動函數,它返回一個更新的電路板圖,之後我調用'getImgSrc'函數,它更新電路板,然後我調用EJB的計算機移動函數,它也返回更新的電路板的地圖,然後我再次調用'getImgSrc',它會更新電路板本身。
不過,如果我嘗試使用定時器來調用計算機的移動功能,這樣的 -
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
@Override
public void run()
{
getMachineMove();
}
} , 1000);
的「getMachineMove」功能是一秒鐘之後調用,該函數調用「getImgSrc」,但董事會不會更新。它不會被更新,因爲'FacesContext.getCurrentInstance()'返回null。 我希望我已經清楚了 - 如果是的話,我會很感激任何形式的幫助(並且我想怎樣才能使某些命令按鈕閃爍)。
歡呼聲, 埃雷茲
- 謝謝您的詳細解答。 我已經很容易地管理了'ScheduledExecutorService',但是當我試圖實現PrimeFace的推送時,它不起作用(儘管他們的例子看起來很簡單)。我想答案在這裏 - http://blog.primefaces.org/?p=1440,因爲我使用GlassFish 3.0。 因此我會嘗試實現JS內的超時 – eRez 2012-03-19 20:27:50