Wicket查询API并在单击AjaxEventBehavior时将数据写入数据库

时间:2015-08-14 19:29:49

标签: onclick wicket panel

我有一个在网格中显示的传奇玩家组件(wicket面板)的专业联盟列表,对于每个玩家,他们有自己的模态视图(也是一个wicket面板)。我的问题在于网站的初始加载,因为正在创建所有wicket面板(玩家和玩家模式面板),模态面板具有玩家信息的列表视图,这需要相当长的时间来加载所有玩家信息和将它写入数据库表。有没有什么方法可以让我的查询只在点击一个玩家时发生?我考虑过将查询放在AjaxEventBehavior中,但是我的dao上遇到了NotSerialiableException。我还考虑仅在点击播放器时添加模态面板(也使用ajaxeventbehavior)并且我无法弄清楚如何动态添加html:     

最好的方法是什么,所以我不必在网站初始加载时查询api /数据库?

以下是玩家面板,您可以看到我在选择播放器面板时添加模板面板:

public PlayerPanel(String id, final IModel<?> model) {
    super(id, model);

    Label proName = (new Label("proName", model));
    proName.add(new AttributeModifier("data-target", "#modal" + model.getClass().toString()));
    add(proName);

    //initializing daos for player
    ApplicationContext context = new ClassPathXmlApplicationContext("Spring-Module.xml");

    ProPlayersDaoJdbc proPlayersDao = (ProPlayersDaoJdbc) context.getBean("proPlayersDaoJdbc");
    ProGamesDaoJdbc proGamesDao = (ProGamesDaoJdbc) context.getBean("proGamesDaoJdbc");

    ArrayList<Players> allPlayers = (ArrayList<Players>) proPlayersDao.listPlayers();
    final ArrayList<Games> games = new ArrayList<Games>();

    for(Players p : allPlayers){
        if(p.getProName().equals(model.getObject().toString())){

            region = p.getRegion();
            player = p;

            Image proImage = new Image("proImage", p.getThumbnailPath());
            proImage.add(new AttributeModifier("src", p.getThumbnailPath()));
            proImage.add(new AttributeModifier("data-target", "#modal" + model.getObject().toString()));
            try {
                ArrayList<Games> gamesList = updateGamesPlayed(player.getSummonerId());
                for(Games game : gamesList){
                    games.add(game);
                }
            } catch (RiotApiException e) {
                e.printStackTrace();
            }

            add(proImage);
        }
    }

    if(!games.isEmpty()){
        for(Games game : games){
            proGamesDao.create(game);
        }
    }

    add(new ModalPanel("modalPanel", model));
}

updateGamesPlayed(...)方法查询API,proGamesDao.create(游戏)将其写入db表。

1 个答案:

答案 0 :(得分:0)

您可以在点击方法上进行玩家图像/链接进行数据库查询,将结果设置为子面板的默认模型对象,并通过target.add进行页面或网格刷新。在子面板上,您可以控制大小。