Java Struts<;逻辑:notEmpty>;不工作或bean属性未正确写入JSP?

Java Struts<;逻辑:notEmpty>;不工作或bean属性未正确写入JSP?,java,jsp,jstl,struts,struts-tags,Java,Jsp,Jstl,Struts,Struts Tags,我开始对一个我不太熟悉的程序进行bug修复。我已经更改了其中一个JSP上的一段代码。我需要它以以下两种格式之一打印名称(取决于中间名属性是否存在): 姓,姓M 姓 我相信我的代码应该打印中间的首字母和句点,如果且仅当该属性存在,但对于列表中的每个名称,它会打印: 姓,姓 它要么不打印中间首字母,要么打印中间首字母为空字符串,后跟句点 有关守则如下: <html:link styleClass="recordLink" action="/secure/admin/users?actionMe

我开始对一个我不太熟悉的程序进行bug修复。我已经更改了其中一个JSP上的一段代码。我需要它以以下两种格式之一打印名称(取决于中间名属性是否存在):

姓,姓M

我相信我的代码应该打印中间的首字母和句点,如果且仅当该属性存在,但对于列表中的每个名称,它会打印:

姓,姓

它要么不打印中间首字母,要么打印中间首字母为空字符串,后跟句点

有关守则如下:

<html:link styleClass="recordLink" action="/secure/admin/users?actionMethod=details" paramId="userId" paramName="users" paramProperty="userId">
    <bean:write name="users" property="lastName"/>,
    <bean:write name="users" property="firstName"/>
    <logic:notEmpty name="users" property="middleName">
        <bean:write name="users" property="middleName"/>.
    </logic:notEmpty>
</html:link>

,
.
为什么
标记不起作用?如果属性不存在,
middleName
属性是否可以确定为非空?我的语法有问题吗


我还尝试使用JSTL标记,但在OC4J中无法使其工作(错误:“不是已注册的TLD命名空间)。

我怀疑您的
middleName
是空字符串或有空格。如果是这样,请尝试使用
logic:equal
匹配并打印一些字符,而不是句号,看看会发生什么。如果为true,则在将其发送到JSP之前修剪
middleName

标记
logic:notEmpty
的计算结果为true,因为中间名字符串有空格。在将空格返回到标记之前,应该先去掉空格。最好以豆子的形式做

public String getMiddleName() { return middleName != null? middleName.trim(): middleName;}   

语法看起来不错。如果删除notEmpty条件会发生什么?它会打印任何中间名?它会打印相同的东西。这就像中间名是空的或空的,但struts认为不是空的。我甚至在
标记周围扔了一个
,以确保
middleName
属性甚至存在,并且它仍然打印相同的内容。如果
middleName
实际上是一个
char
而不是
String
,这会导致问题吗?是的,可能是问题所在。据我所知,struts试图从表单中只获取
字符串。还有其他想法吗?我的中间名字符串似乎没有空格。它会打印一个空字符串或什么都不打印。没有任何东西它无法打印,请确保您有一个有效的字符。我想您已经了解了一些事情。我在中间名(
“”.
)的打印周围加了引号,它打印了一个空格。