如何仅显示特定java类的值?

时间:2016-03-17 09:33:34

标签: java spring jsp jstl el

我有一个表,其中包含在java类的构造函数中设置的各种属性。我需要显示所有属性,但是当我想要这样做时,我可以轻松获得nullpointers。我已经尝试过jstl if和jstl选择这样做。

<c:choose>
    <c:when test="${empty animal.getEarSize()}">
        not set!
    </c:when>
    <c:otherwise>
        ${animal.getEarSize()}
    </c:otherwise>
</c:choose>

但是当我尝试运行它时,我得到HTTP状态500 - 处理JSP页面时发生异常。 动物是jstl for循环中的变量,并非所有动物都在构造函数中有耳朵化。

我在这里做错了什么? 有没有其他方法可以做到这一点,或者这是使用jstl选择或if?

执行此操作的唯一方法

编辑:我在控制器中使用一种方法,该方法为地图提供了动物对象,我可以在其中循环。

public AfricanElephant(String color, String bodyCovering, String name, double weight, Gender gender, int earSize) {
    super(color, bodyCovering, name, weight, gender, maxNumberOfEggs, earSize);
}

public Parrot(String color, String bodyCovering, String name, double weight, Gender gender) {
    super(color, bodyCovering, name, weight, gender, maxNumberOfEggs);
}

这些是elephant构造函数中的两个示例构造函数,其中有一个用于earize的变量,但在parrot构造函数中,没有用于earize的变量。

编辑:我已将选择更改为:

<td> 
            <c:if test="${animal.getClass().name eq 'myPackage.MyPath.AfricanElephant'}">${animal.earSize}</c:if>

这会修复HTTP状态500错误,但现在它在表格中显示0而不是我设置的earize。

我的控制员:

@Controller("animalController")

公共类AnimalController {

 ArrayList<Animal> animals = new ArrayList<Animal>();

@RequestMapping(value = "/animaloverview", method = RequestMethod.GET)
public String animals(Map<String, Object> model, @RequestParam(value = "race", required = false, defaultValue = "") String race){
    if(race.isEmpty()){
         model.put("animals", Zoo.getInstance().getAllAnimals());

    }

    else{
        model.put("animals", Zoo.getInstance().getAnimalsByRace(race));
   }

    return "animalkingdom";
}

2 个答案:

答案 0 :(得分:0)

你不能这样检查。 EL empty仅适用于空字符串或null,不适用于不存在的属性。您可以向Parrot添加getEarSize()方法,返回null,或检查动物是否为instanceof AfricanElephant,然后打印${animal.earSize}(不是getEarSize()! )。

类似的东西:

<c:if test="${animal.getClass().name eq 'package.path.AfricanElephant'}">

另外,Amit Goel的回答是错误的。 EL正在使用getter方法,而不是直接访问属性(并且它们应该是私有的)。如果你有一个方法,例如:getFullSize(),它会返回计算结果,但你不能t有fullSize属性,你仍然可以说${animal.fullSize},它会显示结果。

答案 1 :(得分:-1)

不要使用java getter getEarSize()。如果您的实体拥有属性earSize,请检查

<c:when test="${empty animal.earSize}">