我有一個自制的標籤庫,我在JSP中使用。我的contains
-tag出現問題。如何在我的自定義JSP標記中傳遞整數值作爲參數?
這是一個通用的contains-check,它接受一個列表和一個對象,並執行一個簡單的檢查,如果該列表包含該對象。但是,當列表包含整數值時,我遇到了問題。
這是我如何調用標籤:
<custom:contains object="1" list="${sessionScope.USER.userProfiles}"/>
,這裏是Java類將調用:
public class ContainsTag extends SimpleTagSupport{
private List<Object> list;
private Object object;
public void setList(List<Object> list) {
this.list = list;
}
public void setObject(Object object) {
this.object = object;
}
@Override
public void doTag() throws JspException, IOException {
boolean result;
try {
if(list == null || object == null){
result = false;
}
else{
result = list.contains(object);
}
getJspContext().getOut().print(result);
} catch (Exception e) {
e.printStackTrace();
// stop page from loading further by throwing SkipPageException
throw new SkipPageException("Exception in checking if " + list
+ " contains " + object);
}
}
}
打印線報表顯示,即使對象打印1
,並且列表打印[1]
,結果是false
。由於該標籤適用於其他類型的對象(字符串等),這使我得出的結論是,對象是一個字符串值,因此在整數列表中找不到。我無法將對象轉換爲整數,因爲我的標記不再是通用的。
有沒有辦法指定參數是EL中的整數值?我需要製作另一個標籤ContainsInteger
嗎?還是有其他解決方案來解決這個問題嗎?
UPDATE:
設置對象值"${1}"
而不是"1"
,沒有什麼區別...
」 ......更正式地說,返回true當且僅當此列表包含至少一個元素e(O == NULLé== NULL:o.equals(E ))。「在你的情況下,這永遠不會是真的,因爲1被視爲字符串,並且(我猜)你的List的成員是整數。所以要麼你應該使用一些[泛型](https://docs.oracle.com/javase/tutorial/java/generics/why.html)或使用字符串列表。 – Fildor
你是說沒有辦法將值作爲數字整數傳遞?目前我正在研究如果反射可以用於類型值,如果它們不是相同的類型。但是,如果我可以指定該值應該是數字,那麼它會更加簡單和乾淨。 – KjetilNordin
這就是爲什麼我建議泛型。不要使用'Object',而是使用T作爲類型。我認爲應該可以將1作爲數字1來處理,如果允許列表實際上是整數列表而不是對象。如果可能的話。我沒有太多的JSTL經驗...... – Fildor