JSP int值被转换为bool

时间:2013-09-04 13:24:24

标签: jsp spring-mvc

我正在研究JSP中的一个项目,我对生成的html有疑问。

生成的html:“1”转换为“Oui”(法语为Yes),“0”转换为“Non”(法语为No)

<select id="privilegesRole" name="privileges" multiple="multiple">
    <option value="5" selected="selected">Role 1</option>
    <option value="4" selected="selected">Role 2</option>
    <option value="Oui" selected="selected">Role 3</option>
    <option value="6" selected="selected">Role 4</option>
    <option value="2" selected="selected">Role 5</option>
    <option value="Non" selected="selected">Role 6</option>
    <option value="3" selected="selected">Role 7</option>
</select>

我的JSP代码:

<form:select path="privileges" multiple="true" id="privilegesRole">
    <form:options itemLabel="libelle" itemValue="id" items="${role.privileges}" />
</form:select>

控制器:在我的控制器中值很好

RoleAdministration role = findBy....();
model.addAttribute("role", role);

提前感谢您的帮助

编辑:我有一个BooleanFormatter.java,但我看不到它的用途

import org.springframework.format.Formatter;
import org.springframework.stereotype.Component;

@Component
public class BooleanFormatter implements Formatter<Boolean> {

   private String trueLabel = UtilMessages.getInstance().getString("common.oui");

   private String falseLabel = UtilMessages.getInstance().getString("common.non");

   @Override
   public String print(Boolean arg0, Locale arg1) {
       return arg0 ? trueLabel : falseLabel;
   }

   @Override
   public Boolean parse(String arg0, Locale arg1) throws ParseException {
       if (Boolean.TRUE.toString().equals(arg0))
           return true;
       else if (Boolean.FALSE.toString().equals(arg0)) {
           return false;
       } else if (trueLabel.equals(arg0))
           return true;
       else if (falseLabel.equals(arg0)) {
           return false;
       }
       throw new ParseException(arg0, 0);
   }
}

我们已将jsp代码更改为:

<form:select id="privilegesRole" path="privileges" multiple="true" >
    <c:forEach items="${role.privileges}" var="currPrivilegeSelect">
        <option value="<c:out value="${currPrivilegeSelect.id}"/>" 
                title="<c:out value="${currPrivilegeSelect.description}"/>"> 
                <c:out value="${currPrivilegeSelect.libelle}"/> </option>
    </c:forEach>
</form:select>

这是有效的,但我们不知道为什么。如果您有任何解释,我们将很乐意阅读它:)

1 个答案:

答案 0 :(得分:0)

检查privileges内的RoleAdministration对象,根据spring formatter documentation查找字段id,我们可以将任意field与任意注释相关联{ {1}}或实施Formatted。 在你的情况下,它可能像

custom format annotation@Formatted(BooleanFormatter.class)

位于@BooleanFormatted对象内的id字段顶部。