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