JavaBeans与复杂类型一起使用

时间:2011-03-13 21:59:28

标签: java jsp

我不确定我是否已经正确地标记了这个问题。但我要做的是将Javabean映射到我拥有的输入。除了Bean包含我要映射到的复杂类型属性(我想要映射到它的属性是特定的)。让我用代码解释一下。我有一个游戏课:

public class Game
{
 private GameStatistics gameStats;
public GameStatistics getGameStats() {

    if(gameStats == null){
     gameStats = new GameStatistics();
    }
    return gameStats;
}

public void setGameStats(GameStatistics value) {
    gameStats = value;
}
}

我有一个GameStatistics类:

private int amountOfNumbersToMemorise;
public int getAmountOfNumbersToMemorise() {
    return amountOfNumbersToMemorise;
}

public void setAmountOfNumbersToMemorise(String value) {
    amountOfNumbersToMemorise = Integer.parseInt(value);
}

然后在我的JSP中我有类似的东西:

<jsp:useBean id='game' scope='session' class='Classes.Game' />

 <form method="Post" action="numberDisplay.jsp">
      Enter your username:  <input name="username" type="text" /> <br />
      How many numbers to remember: <input name="gameStats.amountOfNumbersToMemorise" type="text"/> <br />
        <input type="Submit" value="Show me the numbers!" />
    </form>

上面的页面转到另一页:

<jsp:useBean id='game' scope='session' class='Classes.Game' />
<jsp:setProperty name="game" property="*"/>
//more code here
  <ul>
        <% for(int x=0; x < game.getNumbersToMemorise().size(); x++)
            {%>
            <li><%=game.getNumbersToMemorise().get(x) %> </li>
       <% } %></ul>
// more code

我没有包含一些属性,因为它们并不重要,但我似乎无法将输入第二个输入框的数字映射到复杂类型的属性。

我不能使用MVC,因为这是一项任务,我们必须这样做:(

这有意义吗?我是Java新手(我是C#人员)所以任何帮助都会非常感谢,谢谢:)

2 个答案:

答案 0 :(得分:2)

如果您被限制为jsp:useBean / jsp:setProperty,那么您需要事先自己创建两个bean,然后自己将子bean设置为父bean的属性。以下代码段中的最后一行基本上是game.setGameStatistics(gameStatistics)

<jsp:useBean id="game" class="com.example.Game" scope="session" />
<jsp:setProperty name="game" property="*" />
<jsp:useBean id="gameStatistics" class="com.example.GameStatistics" scope="request" />
<jsp:setProperty name="gameStatistics" property="*" />
<jsp:setProperty name="game" property="gameStatistics" value="${gameStatistics}" />

还要确保输入字段名称与确切的bean属性名称匹配。因此不要使用

<input name="gameStats.amountOfNumbersToMemorise">

但只是

<input name="amountOfNumbersToMemorise">

并确保两个bean不共享相同的属性名称。


但是我热烈建议你看一下基于Java的MVC框架,比如JSF或Spring MVC,它可以透明地完成所有这些,而不需要使用遗留的jsp:useBeanjsp:setProperty标签。

答案 1 :(得分:0)

使用类似的东西:

<input name="dontworryaboutinputname" type="text" value="${gameStats.amountOfNumbersToMemorise}"/>