为什么EL函数应该来自具有非void返回类型的Java方法?

时间:2011-07-31 07:30:00

标签: java database jsp el

我有一种情况,我认为使用一个void java方法的EL函数是个好主意。这是一个简单的jsp来更新人们名字和姓氏的数据库。因此,有两个文本字段,名称和密码。用户输入并单击提交,然后使用POST将这些转发给另一个jsp。这个jsp简单地调用EL函数,让我们称它为“put”,它接受两个参数,并从一个java方法putPerson(String, String)派生,它获取与数据库的连接,并将名字和姓氏放在适当的位置。现在,putPerson是无效的,因为它只是将字符串放在数据库中。那么,这是不好的编程实践,如果是这样,为什么呢?在我看来,它是一个快速和优雅的解决方案,它的工作原理。唯一的问题是你不能只是通过说${put(first, last)}来调用它,因为由于某些原因打印出“<”,但这很容易解决。那么为什么他们建议不要使用带有void返回类型的EL函数?

2 个答案:

答案 0 :(得分:1)

打印<将来自其他地方,或者是EL解析器中的错误。但不管怎样,你不应该在EL函数中这样做。

EL函数应该是实用程序 - 例如.substring().join()(数组)等。它们在您显示页面时使用,需要一些更复杂的表示逻辑

您想要做的是一个典型的故事,它是在servlet(或任何其他动作组件,如果您使用框架)中完成的。

答案 1 :(得分:0)

您需要的机制比EL更早 - 它被称为scriptlet:

<%
    whatever.putPerson("John", "Smith");
%>

在早期的JSP中,另一种语法用于打印值(注意等号):

<%=
    whatever.getVal();
%>

因为当存在命令/查询分离时感觉更容易维护代码,所以引入EL作为查询模型的方式(=读取bean的属性)。由于scriptlet可用于满足罕见的情况,只需要“运行一些代码”是必要的,向EL添加这样的功能是没有意义的:我们将有两种方法来实现同样的事情,我们将打破EL的概念表达式始终具有值和类型。

所以:

  • 使用EL调用void方法就像... uhmpf ...使用import运行代码:没有意义;
  • 这不是问题,因为你可以使用调用方法的机制:一个scriptlet。