Suppress empty parameters using param tag

拈花ヽ惹草 提交于 2019-11-28 09:31:57

问题


I have written JSP that I used with many actions. It has a link with parameters

The link:

<s:a namespace="/some" action="view">
  <s:param name="purpose" value="%{purpose}"/>
  <s:param name="type" value="%{type}"/>
  <s:property value="%{name}"/>
</s:a>

The action class:

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;
  }
}

Usually I initialize both parameters, but sometimes one parameter is null. So, the link is generated with href like

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

but I want to remove &type=

I tried an example from 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>

but it didn't work

I also tried

<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>

and I got

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)

How to solve this problem?


回答1:


Well that line <s:param name="suppressEmptyParameters" value="true"/> doesn't make sense, and it should be removed from the <s:param> docs.

The <s:param name="type" value="%{type}" suppressEmptyParameters="true"/> is correct way of suppressing empty parameters and it isn't working with not String-s because of the bug WW-4275.

Meanwhile, until the next version is released, you can use toString() method to avoid ClassCastException exception.

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


来源:https://stackoverflow.com/questions/25796090/suppress-empty-parameters-using-param-tag

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!