我需要在载入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