重构JSP中的EL表达式

6

我有很多包含EL表达式的JSP文件,形式如${foo.bar.baz.phleem1}${foo.bar.baz.phleem2}等(前两个或三个片段相同)。为了减少EL查找,我正在重构这些页面:

源代码:

<c:out value="${foo.bar.baz.phleem1}" />
<c:out value="${foo.bar.baz.phleem2}" />
<c:out value="${foo.bar.baz.phleem3}" />

重构后:

<c:set var="baz" value="${foo.bar.baz}" />
<c:out value="${baz.phleem1}" />
<c:out value="${baz.phleem2}" />
<c:out value="${baz.phleem3}" />

我知道大部分可以通过搜索/替换完成,但是这样做感觉不太安全,因为它会忽略代码结构。

在Eclipse或IntelliJ Idea中是否支持此类重构操作?


2
据我所知,Eclipse中没有这个功能。但是在Eclipse中,您可以将搜索和替换结果并排预览,并在应用之前取消选择列表中的不正确匹配项。 - BalusC
我已经检查过了。IDEA 11.0.1也不支持这种重构。 - Vadzim
我也是这样想的,否则我就不会问了。 - Sean Patrick Floyd
更新了我所做的事情。 - Ratna Dinakar
2个回答

1
也许你可以在emacs中使用nxml-mode。(我没有测试过) 有一些函数,比如nxml-up-element。我敢打赌你可以创建一个强大的宏。但我认为更容易通过grep代码并手动完成。

哈哈哈,对于疯狂的emacs建议加一。 - Sean Patrick Floyd
主要问题是我们的JSP不是格式良好的XML。否则我会自己编写一些基于XML的工具。 - Sean Patrick Floyd

0

是的。您可以在Eclipse中使用正则表达式占位符,并相应地进行更改。

请参考以下网址了解Eclipse中的正则表达式 http://www.eclipse.org/tptp/home/downloads/installguide/gla_42/ref/rregexp.html

单击搜索[Ctrl + H],选中正则表达式选项和文件模式为jsp。

enter image description here

按下Ctrl+空格键以获取内容辅助。

enter image description here

点击搜索匹配项,使用替换功能一次性替换所有匹配的字符串。您可以使用正则表达式组来替换内容。

enter image description here

enter image description here

enter image description here


1
OP非常清楚:“我知道我可以通过搜索/替换来完成大部分工作,但这感觉不安全,因为它忽略了代码结构。” OP更希望像普通Java源代码中的Alt+Shift+L一样具有相同的重构功能。 - BalusC
1
这个答案并没有真正说明如何做OP所问的事情,只是告诉他可以使用什么来拼凑自己的解决方案,这可能不等同于“提取变量”操作。 - millimoose
我曾经使用同样的方法,在一次操作中将大约350个Java文件重命名了包名 :)!我认为使用正则表达式组可能会有所帮助 :) - Ratna Dinakar
@BalusC 没错。不过,还是要给发帖者的努力点个赞。 - Sean Patrick Floyd
1
@Ratna: 在Java源文件中,包/类/方法/变量重命名可以通过Eclipse的Alt+Shift+R实现。搜索和替换不够可靠。更重要的是,Eclipse项目资源管理器中按F2键也可以重命名包。 - BalusC
@BalusC 我有一个要求,需要在类声明中添加扩展其他类的功能!! - Ratna Dinakar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接