2012-05-05 16 views
1
JSP頁面

使用我的自定義bean的ArrayList。我想通過調用ArrayListtoArray方法,然後覆蓋上包含的對象toString使用與ArrayList JSTL的join功能。通過預待定「得到」別名對象方法中

有人說,有沒有什麼阻止我從擴展類,包括「獲取」的方法/我想接觸到JSP屬性。

所以,在這個例子:

class MyArrayList extends ArrayList 
{ 
    public Object[] getToArray() 
    { 
    return this.toArray(); 
    } 
} 

好主意?

我一直在創建這樣的類,考慮到可重用性,有我想知道:是否存在一個庫,通過別名有用的方法來獲取「get」版本,從而擴展了很多核心Java類他們可以在JSP中使用?

當然,這可能是另一種情況,我沒有完全理解關於JSP的一些基本概念,但我認爲這是純粹的不便,因爲只有具有「get」樣式方法名的bean類纔可以用在JSP中頁。如果是這樣,請隨時告訴我爲什麼這樣的圖書館是個壞主意。基本上,如果像我描述的圖書館不存在,爲什麼不呢?

+1

是否EL 2.2,它允許你調用任意方法(可在Tomcat的7起)得到你需要什麼?例如$ {someListObject.toArray()}應該返回一個數組。 –

+0

@MarkThomas這當然聽起來像它那樣。我被困在(現在)與6。謝謝,這是一個很好的答案。 – Matthew

回答

2

至於您的具體功能要求,您可以創建一個自定義EL join()函數,該函數需要ListCollection

E.g.

package com.example; 

import java.util.Collection; 

public final class Functions { 

    private Functions() {} 

    public static <E> String join(Collection<E> collection, String separator) { 
     StringBuilder builder = new StringBuilder(); 

     for (E element : collection) { 
      if (builder.length() > 0) { 
       builder.append(separator); 
      } 

      builder.append(element); 
     } 

     return builder.toString(); 
    } 

} 

您註冊成爲一個/WEB-INF/functions.tld文件如下:

<?xml version="1.0" encoding="UTF-8" ?> 
<taglib 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" 
    version="2.1"> 

    <tlib-version>1.0</tlib-version> 
    <short-name>Custom Functions</short-name> 
    <uri>http://example.com/functions</uri> 

    <function> 
     <name>join</name> 
     <function-class>com.example.Functions</function-class> 
     <function-signature>java.lang.String join(java.util.Collection, java.lang.String)</function-signature> 
    </function> 
</taglib> 

哪些能最終可作爲

<%@taglib prefix="f" uri="http://example.com/functions" %> 

${f:join(bean.list, ', ')} 

或者,如果你碰巧有Apache Commons Lang已經在classpath中,只需委託給它。

<function> 
     <name>join</name> 
     <function-class>org.apache.commons.lang.StringUtils</function-class> 
     <function-signature>java.lang.String join(java.util.Collection, java.lang.String)</function-signature> 
    </function> 

至於你最初的問題,我寧願不公開的自定義方法添加到已經存在的接口的定製實現,並且依賴於自定義實現。

+0

這是一個很好的解決方案,在這種情況下,一個很好的替代我的「走樣」類。謝謝。 – Matthew

1

EL 2.2 - 它允許你調用任意的方法(在Tomcat中7起可用) - 應該得到你所需要的。例如$ {someListObject.toArray()}這應該返回一個數組