使用 param 标签抑制空参数
Posted
技术标签:
【中文标题】使用 param 标签抑制空参数【英文标题】:Suppress empty parameters using param tag 【发布时间】:2014-11-05 21:54:27 【问题描述】:我编写了用于许多操作的 JSP。它有一个参数链接
链接:
<s:a namespace="/some" action="view">
<s:param name="purpose" value="%purpose"/>
<s:param name="type" value="%type"/>
<s:property value="%name"/>
</s:a>
动作类:
public class ViewAction extends ActionSupport
private Long purpose;
private Long type;
private String name;
public Long getPurpose()
return purpose;
public void setPurpose(Long purpose)
this.purpose = purpose;
public Long getType()
return type;
public void setType(Long type)
this.type = type;
public String getName()
return name;
public void setName(String name)
this.name = name;
通常我会初始化两个参数,但有时一个参数是null
。所以,链接是用href
like生成的
/context/some/view?purpose=1&type=
但我想删除&type=
我尝试了来自Param Examples 的示例。
<s:a namespace="/some" action="view">
<s:param name="purpose" value="%purpose"/>
<s:param name="type" value="%type"/>
<s:property value="%name"/>
<s:param name="suppressEmptyParameters" value="true"/>
</s:a>
但是没用
我也试过了
<s:a namespace="/some" action="view">
<s:param name="purpose" value="%purpose"/>
<s:param name="type" value="%type" suppressEmptyParameters="true"/>
<s:property value="%name"/>
</s:a>
我得到了
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
at org.apache.struts2.components.Param.end(Param.java:129)
at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
如何解决这个问题?
【问题讨论】:
【参考方案1】:那行<s:param name="suppressEmptyParameters" value="true"/>
没有意义,应该从<s:param>
文档中删除。
<s:param name="type" value="%type" suppressEmptyParameters="true"/>
是抑制空参数的正确方法,由于 WW-4275 的错误,它不适用于 not String-s。
同时,在下一个版本发布之前,您可以使用toString()
方法避免ClassCastException
异常。
<s:param name="type" value="type.toString()" suppressEmptyParameters="true"/>
【讨论】:
当然,但这只是一个警告,您可以忽略它。或者编写一个表达式检查 nulltype == null ? '' : type.toString()
。以上是关于使用 param 标签抑制空参数的主要内容,如果未能解决你的问题,请参考以下文章