我正在嘗試使用Spring MVC製作這個2人遊戲的網頁遊戲應用程序。我有會話範圍的bean Player
和應用程序範圍的bean GameList
,它創建並存儲Game
實例並將它們傳遞給Players
。玩家創建一個遊戲並從GameList
獲得其ID,其他玩家將ID發送到GameList
並獲取Game
實例。 Game
實例將其播放器作爲屬性。問題是每個玩家只能看到自己而不是另一個。每個玩家看到什麼我可以從應用程序範圍的bean訪問Spring會話範圍的bean嗎?怎麼樣?
例子:
- 第一的球員(愛麗絲)創建了一個遊戲:
Creator: Alice, Joiner: Empty
- 第二個玩家(BOB)加入遊戲:
Creator: Bob, Joiner: Bob
- 首先玩家刷新她的瀏覽器
Creator: Alice, Joiner: Alice
我想讓他們看到的是Creator: Alice, Joiner: Bob
。實現這一點的簡單方法是保存關於玩家的信息,而不是引用玩家,但遊戲對象需要調用玩家對象的方法,所以這不是解決方案。
我認爲這是因爲session-scoped Player bean的aop:scoped-proxy
。如果我理解了這一點,Game對象就引用了代理,它引用了當前會話的Player對象。遊戲實例能以某種方式保存/訪問其他玩家對象嗎?
豆調度-servlet.xml中:
<bean id="userDao" class="authorization.UserDaoFakeImpl" />
<bean id="gameList" class="model.GameList" />
<bean name="/init/*" class="controller.InitController" >
<property name="gameList" ref="gameList" />
<property name="game" ref="game" />
<property name="player" ref="player" />
</bean>
<bean id="game" class="model.GameContainer" scope="session">
<aop:scoped-proxy/>
</bean>
<bean id="player" class="beans.Player" scope="session">
<aop:scoped-proxy/>
</bean>
方法controller.InitController
private GameList gameList;
private GameContainer game;
private Player player;
public ModelAndView create(HttpServletRequest request,
HttpServletResponse response) throws Exception {
game.setGame(gameList.create(player));
return new ModelAndView("redirect:game");
}
public ModelAndView join(HttpServletRequest request,
HttpServletResponse response, GameId gameId) throws Exception {
game.setGame(gameList.join(player, gameId.getId()));
return new ModelAndView("redirect:game");
}
在
調用的方法model.gameList
public Game create(Player creator) {
Integer code = generateCode();
Game game = new Game(creator, code);
games.put(code, game);
return game;
}
public Game join(Player joiner, Integer code) {
Game game = games.get(code);
if (game!=null) {
game.setJoiner(joiner);
}
return game;
}
@Pascal Thivent:我看不出這個問題與jsp-tags有什麼關係,但無論如何......你是老闆:-P – 2010-05-25 23:32:33
這只是一個錯誤,由於自動完成,現在修復。 – 2010-05-26 12:25:06