2017-08-29 56 views
0

我正在使用基於JSP的框架(由公司員工創作;基於/擴展了Struts2),它使用bean作爲表單數據。相當標準的東西。在JSP/Struts bean中捕獲可變數量的字段

例如,假設此標記:

<input name="foo" type="text" />

在一些點,框架將獲得一個實例,我給它一個JavaBean,而在網頁加載時,它會嘗試打電話給bean.getFoo(),並期望它返回String,然後將其設置爲輸入字段的值。

然後,當頁面保存時,在框架的某個位置它將拾取提交給<form>元素的值,它將調用bean.setFoo(String val)並傳遞該值作爲參數。

該框架還支持基於模板動態生成可變數量的字段。一旦你過去所有的JSP代碼,它生成HTML,如:

<input name="foo_1" type="text" /> 
<input name="foo_2" type="text" /> 
<input name="foo_3" type="text" /> 

自然,然後試圖調用bean.setFoo_1(String val)bean.setFoo_2(String val)bean.setFoo_3(String val)等爲圖案的多個實例,因爲在頁面上。

可能出現的次數實際上是無限的(並且肯定足夠大,以至於手動創建所有可能的實例都是無聊的)。所以我正在尋找一些動態bean類,它允許框架調用這些getter和setter,並且發現它們實際上是作爲框架正在處理的對象實例上的getter/setter公共方法存在的。據推測,它使用反射來確定方法是否存在。

有什麼方法可以實現這個(或使用現有的庫)而不是寫下面的東西? :

public class MyBean { 

    private String foo_1; 
    private String foo_2; 
    private String foo_3; 
    private String foo_4; 
    private String foo_5; 
    // 30 years later ... 
    private String foo_2147483647; 

    // Eclipse -> Generate getters and setters... for all 2167483647 of the above and watch it crash OOM because I have so many fields 
} 
+0

我個人認爲,如果你的bean有這麼多的領域,然後應用程序被misdesigned。用戶實際上想要在輸入屏幕上看到很多字段?但是,我沒有現成的框架給你。也許不得不推出自己的,但首先我會自己質疑這些課程的設計。 – markspace

+0

用戶不會同時在屏幕上看到許多字段,除非*他們*選擇添加那麼多字段。這是一個可編輯的「表格」,您可以在其中添加新行,並將值輸入到每列中的文本字段中。問題是我無法預測用戶合理預期的最大數量。實際上它可能會在100左右,但是,如果用戶創建了許多開頭,它們只會顯示出來。它實際上是以空表開始的。在我的bean中創建foo_100仍然非常難看。 – allquixotic

+0

但是你沒有豆子。如果字段的數量是可變的,你可以使用像ArrayList那樣的變量。不要試圖爲每個可能的字段輸入實現一個字段的類。這太瘋狂了。 – markspace

回答

0

只是要形式,如:

<input type="text" name="foo" value="apple"/> 
<input type="text" name="foo" value="banana"/> 
<input type="text" name="foo" value="grapefruit"/> 

,並在操作創建馬託setFoo(String[] foos);