gpt4 book ai didi

java - 如何使用 EL 避免重复?

转载 作者:行者123 更新时间:2023-11-30 11:46:42 24 4
gpt4 key购买 nike

我正在将我的 .jsp 从 scriplet 重写为 JSTL/EL,但我遇到了一个问题。它可能非常简单,但我是 EL 的新手,有点迷茫。

这是我正在做的...

在 servlet/ Controller 中:

final List<Person> l = new ArrayList<Person>();
personList.add(...);
.
.
request.setAttribute( "personList", l );

在我的 .jsp 中:

<c:forEach var="person" items="${personList}">
${person.name}
</c:forEach>

但我正在复制“personList”,因为我在 setAttributeforEach 中都使用了它。我怎样才能摆脱这种重复?

理想情况下,我希望有一个常量,如 public static final String,我可以从 servlet 和 .jsp(使用 EL,不是小脚本)。

显然,我想消除这种重复的原因是,如果我决定将 personList 重命名为,比如说,persons(带有“s”),我目前需要改变两件事,这是容易出错的。如果我有一个常量,那么我只需要在一个地方进行更改。

编辑 有人评论说使用常量,如果我更改了常量的名称,仍然需要更改两个地方。但是,如果我能做到这一点会有很大的不同:

request.setAttribute( Constants.PERSON_LIST, l );

然后决定重命名 *PERSON_LIST* 并打错了字,这会在编译时中断。

如果我输入错误:

request.setAttribute( "persnList", l ); // forgetting an 'o' here

如果 .jsp 使用的是“personList”而不是错误输入的“persnList”,这将在运行时编译失败并失败。

最佳答案

这就是您在使用遗留/基本 JSP/Servlet 时得到的结果。您自己手动完成所有前端 Controller 任务。

转到真正的 MVC 框架。例如 JSF、Spring MVC、Wicket 等。这些框架有一个 servlet(或过滤器)充当前端 Controller ,执行创建 bean 的所有讨厌的预处理工作,将它们放在所需的范围内等等。您结束了仅使用 javabean 作为模型和 JSP/Facelets 文件作为 View 的操作。例如 JSF您所需要的只是以下 javabean(它将由 JSF 本身“自动”设置在请求范围内):

@ManagedBean
@RequestScoped
public class Persons {

private List<Person> list;

@EJB
private PersonService service;

@PostConstruct
public void init() {
list = service.list();
}

public List<Person> getList() {
return list;
}

}

还有这个 Facelet View :

<ui:repeat value="#{persons.list}" var="person">
#{person.name}
</ui:repeat>

没有重复,并且当使用合适的 IDE 工具(例如 Eclipse 和 JBoss 工具)时,它们都相互链接,这样您就可以轻松地Source > Refactor > Rename

关于java - 如何使用 EL 避免重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9647373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com