【问题标题】:Cast with Expression Language用表达语言投射
【发布时间】:2011-12-10 02:19:46
【问题描述】:

是否可以使用 EL 进行投射?

我有一个类 Vehicle,以及扩展 Vehicle 的另外两个类 Car 和 Bus。 我正在搜索所有车辆,并且有一些数据在 Bus 中有但在 Car 中没有。

所以我试图展示 Car 的东西(当它是 Car 时)和 Bus 中的东西(当它是 Bus 时)。

我该怎么做呢,Cast,instanceof?我该怎么做,因为我有点迷路了。

谢谢

【问题讨论】:

  • 我想在 EL 中显示 Bus 的一些数据,而不是在 Java 中

标签: java jsf casting el


【解决方案1】:

您可以使用${obj.class.simpleName == 'Car'},但这不是最好的做法。

也许你可以有一个geType() 抽象方法并用它来区分。例如:

<c:forEach items="${vehicles}" var="vehicle">
   Reg.No: ${vehicle.registrationPlateNumber}
   <c:if test="${vehicle.type == 'bus'}">
      Toilets: ${vehicle.toilets}
   </c:if>
</c:forEach>

【讨论】:

  • 如果只有 Bus 有它的方法,我的意思是,我如何显示这个属性的值。
  • getType()instenceof 相同,与.simpleName 相同。你做一个if 来检查。
  • 因为我还是有点迷茫,你介意给我举个例子来说明如何从 Bus 中获取某些属性吗?
  • 非常感谢!!我正在这样做但没有尝试运行,因为它说“未知属性......”但它工作正常!
【解决方案2】:

您将通过从车辆类扩展汽车和公共汽车来做到这一点(因为车辆将是父类)。 例如

public class Vehicle {
   public void speed(){
   // some code
  }
}
public class Car extends Vehicle {
    public void speed(){
    // some code
   }
}
public class Bus extends Vehicle {
   public void speed(){
    // some code
   }
}

现在您可以在启动它们或获取天气时检查它是不使用 instanceOf 关键字的车辆实例。

if(new car() instanceOf Vehicle){
//somecode
}

【讨论】:

  • 我想使用表达式语言从 JSF 页面访问它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
相关资源
最近更新 更多