【问题标题】:Suppress empty parameters using param tag使用 param 标签抑制空参数
【发布时间】:2015-04-05 02:45:22
【问题描述】:

我编写了用于许多操作的 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)

如何解决这个问题?

【问题讨论】:

    标签: java jsp struts2 url-parameters


    【解决方案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()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    相关资源
    最近更新 更多