我需要在載入jsf頁面之前執行Web服務(方法)調用。該調用將返回必須在我的jsf頁面上顯示的輸入字段列表。用戶可以填寫表單,然後點擊下一步,我需要將表單中輸入的值發送回另一個Web服務(方法)。 我的方法是爲jsf頁面(包含一個空白表單和一個綁定到bean)的請求作用域bean,並在我的表單方法的setter方法中執行web服務調用並動態創建UIInput字段
JSF上的動態字段
//call web service
//Loop
UIInput input = new HtmlInputText();
//set unique Id
form.getChildren().add(input);
//End Loop
它確實創建了輸入字段,但是如果我執行瀏覽器回來或刷新它不斷添加輸入字段。很明顯,我的做法是錯誤的。
此外,我發現,當我試圖讓這些動態創建的輸入字段中的值上提交的行動像
List<UIComponent> dynamicFields = form.getChildren();
for(int i=0;i<form.getChildCount();i++){
if("javax.faces.Input".equals(componentFamily)){
UIInput input = (UIInput)dynamicFields.get(i);
System.out.println("Input Field: ID = "+input.getId() + " , Value="+ input.getValue());
}
}
領域的ID是正確打印,但是值始終爲空。顯然這樣做都是錯誤的。
請讓我知道什麼時候以及在什麼時候做我創建領域,我怎麼捕捉使用JSF 2.0 PS上午這些值,JDeveloper中,Glassfish和/或Weblogic Server的
什麼是你的情況的動態領域的工作有什麼好處?爲什麼你不是簡單地使用循環,並在視圖中靜態創建組件? –
Bardelman
2013-04-04 13:43:30
好吧,原因是我不會總是使用單一類型的輸入。 Web服務也返回我輸入的類型。我將使用某種開關來構建必要的表單。 – 2013-04-04 16:46:11
那麼,我想使用組件的動態添加(對於我來說,我有另一個具體的原因),但它似乎有很多問題在這個問題上,也是一個糟糕的文檔。如果你找不到解決方案,你可以用一個 jstl標籤來製作你需要的靜態開關(我猜你已經知道了:D)。 –
Bardelman
2013-04-04 17:12:34