2014-09-11 2 views
2

Я написал JSP, который использовал со многими действиями. Она имеет связь с параметрамиПодавить пустые параметры, используя параметр tag

ссылке:

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

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

Как решить эту проблему?

ответ

4

Хорошо, что строка <s:param name="suppressEmptyParameters" value="true"/> не имеет смысла, и ее необходимо удалить из документов <s:param>.

<s:param name="type" value="%{type}" suppressEmptyParameters="true"/> - это правильный способ подавления пустых параметров, и он не работает с не String-s из-за ошибки WW-4275.

Между тем, пока не будет выпущена следующая версия, вы можете использовать метод toString(), чтобы избежать исключения ClassCastException.

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

Конечно, но это просто предупреждение, которое вы можете игнорировать. Или написать выражение, проверяющее значение null 'type == null? '': type.toString() '. –