我在我维护的遗留应用程序的 JSP 文件中遇到了以下标记:
<logic:equal name="welcome memberInfoView" property="hasFoo" value="false">
那个名字属性对我来说看起来很不对劲。根据我在 Struts 文档中阅读的内容,该空间是不允许的。
这合法吗?如果是这样,它会做什么?如果不是,其意图可能是什么?
编辑:经过更多搜索,我发现“welcome memberInfoView”确实被故意用作属性名称(带有空格)。
实际上,这个名字是合法的,但非常规。虽然在语法上是合法的,但它确实可能是一个错误。
“名称”指定某个范围内的属性名称(由可选的“范围”属性确定,默认为“任何”),而不是脚本变量名称。由于它实际上是映射中的键,因此它可以是任何字符串。
此标记将在页面上下文中开始并查找名为“welcome memberInfoView”的属性。它将继续封闭范围,直到找到命名对象。然后它将查看该对象的“hasFoo”属性。如果为“false”,则将调用封闭的片段。
另一件看起来不对的事情是属性“hasFoo”。通常,该属性只是“foo”,并且对象应该有一个名为isFoo()
or的访问器getFoo()
。也许逻辑标签在这方面是宽松的,并且会成功调用该hasFoo()
方法。
您可以为此用法创建一个简单的测试,并确保它按您的预期工作。