【问题标题】:How to bind a dynamic list of fields in a JSP如何在 JSP 中绑定动态字段列表
【发布时间】:2012-08-20 20:18:31
【问题描述】:

我正在构建一个用于输入足球比赛结果的 JSP 页面。我得到了一份未解决的游戏列表,我想这样列出它们:

team1 vs team4 
    [hidden field: game id]  
    [input field for home goals]  
    [input field for away goals]

team2 vs team5 
    [hidden field: game id]  
    [input field for home goals]
    [input field for away goals]

我永远不知道会列出多少游戏。我试图弄清楚如何设置绑定,以便控制器可以在提交表单后访问这些字段。

有人可以指导我正确的方向吗?我正在使用 Spring MVC 3.1

【问题讨论】:

    标签: spring model-view-controller jsp


    【解决方案1】:

    Spring可以bind indexed properties,所以你需要在你的命令上创建一个游戏信息对象列表,比如:

    public class Command {
       private List<Game> games = new ArrayList<Game>();
       // setter, getter
    }
    
    public class Game {
       private int id;
       private int awayGoals;
       private int homeGoals;
       // setters, getters
    }
    

    在您的控制器中:

    @RequestMapping(value = "/test", method = RequestMethod.POST)
    public String test(@ModelAttribute Command cmd) {
       // cmd.getGames() ....
       return "...";
    }
    

    在您的 JSP 中,您必须为输入设置路径,例如:

    games[0].id
    games[0].awayGoals
    games[0].homeGoals 
    
    games[1].id
    games[1].awayGoals
    games[1].homeGoals 
    
    games[2].id
    games[2].awayGoals
    games[2].homeGoals 
    ....
    

    如果我没记错的话,在 Spring 3 中 auto-growing collections 现在是绑定列表的默认行为,但对于较低版本,您必须使用 AutoPopulatingList 而不仅仅是 ArrayList(仅供参考:@ 987654324@).

    【讨论】:

    • 有趣,只要它在没有 Spring 的 AutoPopulatingList、Apache commons 集合的 LazyList 等的情况下真的可以工作。
    • 谢谢。我一回到我的电脑上就试试这个。
    • @Jerome Dalbert:我为那些使用较低 Spring 版本的人提到了 AutoPopulatingList,因此他们知道“陷阱”。对 binder 的更改是从 Spring 3.0.0 开始的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    相关资源
    最近更新 更多