我有一种情况,我认为使用一个void java方法的EL函数是个好主意。这是一个简单的jsp来更新人们名字和姓氏的数据库。因此,有两个文本字段,名称和密码。用户输入并单击提交,然后使用POST将这些转发给另一个jsp。这个jsp简单地调用EL函数,让我们称它为“put”,它接受两个参数,并从一个java方法putPerson(String, String)
派生,它获取与数据库的连接,并将名字和姓氏放在适当的位置。现在,putPerson
是无效的,因为它只是将字符串放在数据库中。那么,这是不好的编程实践,如果是这样,为什么呢?在我看来,它是一个快速和优雅的解决方案,它的工作原理。唯一的问题是你不能只是通过说${put(first, last)}
来调用它,因为由于某些原因打印出“<”,但这很容易解决。那么为什么他们建议不要使用带有void返回类型的EL函数?
答案 0 :(得分:1)
打印<
将来自其他地方,或者是EL解析器中的错误。但不管怎样,你不应该在EL函数中这样做。
EL函数应该是实用程序 - 例如.substring()
,.join()
(数组)等。它们在您显示页面时使用,需要一些更复杂的表示逻辑。
您想要做的是一个典型的故事,它是在servlet(或任何其他动作组件,如果您使用框架)中完成的。
答案 1 :(得分:0)
您需要的机制比EL更早 - 它被称为scriptlet:
<%
whatever.putPerson("John", "Smith");
%>
在早期的JSP中,另一种语法用于打印值(注意等号):
<%=
whatever.getVal();
%>
因为当存在命令/查询分离时感觉更容易维护代码,所以引入EL作为查询模型的方式(=读取bean的属性)。由于scriptlet可用于满足罕见的情况,只需要“运行一些代码”是必要的,向EL添加这样的功能是没有意义的:我们将有两种方法来实现同样的事情,我们将打破EL的概念表达式始终具有值和类型。
所以: