我正在使用基於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
}
我個人認爲,如果你的bean有這麼多的領域,然後應用程序被misdesigned。用戶實際上想要在輸入屏幕上看到很多字段?但是,我沒有現成的框架給你。也許不得不推出自己的,但首先我會自己質疑這些課程的設計。 – markspace
用戶不會同時在屏幕上看到許多字段,除非*他們*選擇添加那麼多字段。這是一個可編輯的「表格」,您可以在其中添加新行,並將值輸入到每列中的文本字段中。問題是我無法預測用戶合理預期的最大數量。實際上它可能會在100左右,但是,如果用戶創建了許多開頭,它們只會顯示出來。它實際上是以空表開始的。在我的bean中創建foo_100仍然非常難看。 – allquixotic
但是你沒有豆子。如果字段的數量是可變的,你可以使用像ArrayList那樣的變量。不要試圖爲每個可能的字段輸入實現一個字段的類。這太瘋狂了。 – markspace