使用 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。所以,链接是用hreflike生成的

/context/some/view?purpose=1&type=

但我想删除&amp;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】:

那行&lt;s:param name="suppressEmptyParameters" value="true"/&gt; 没有意义,应该从&lt;s:param&gt; 文档中删除。

&lt;s:param name="type" value="%type" suppressEmptyParameters="true"/&gt; 是抑制空参数的正确方法,由于 WW-4275 的错误,它不适用于 not String-s。

同时,在下一个版本发布之前,您可以使用toString()方法避免ClassCastException异常。

<s:param name="type" value="type.toString()" suppressEmptyParameters="true"/>

【讨论】:

当然,但这只是一个警告,您可以忽略它。或者编写一个表达式检查 null type == null ? '' : type.toString()

以上是关于使用 param 标签抑制空参数的主要内容,如果未能解决你的问题,请参考以下文章

grails框架的g:paginate分页标签的使用

mongoose - 如何使用带有请求参数数组的 $in 进行 .find()现在它只返回空数组

Prometheus 抑制但没有匹配的实例标签

如何抑制可能的空引用警告

抑制绘图子图中的y轴标签,注释未对齐

jsp param动作标签