0

我有一个问卷表格,其中组件(问题)都是在我的支持 bean 中以编程方式生成的。

在表单提交事件中,我需要收集所有用户输入并将它们存储在数据库中。

但是 JSF 不能识别动态生成的组件,只能找到我的 Facelets 页面中的组件,它们是我的面板网格和提交按钮。这是我的 submit() 方法。

   public boolean submit() {
        UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
        UIComponent formComponent = viewRoot.findComponent("mainForm");  //form id
        HtmlForm form = (HtmlForm)formComponent;
        List<UIComponent> componentList = form.getChildren();
        for(int p=0; p<componentList.size(); p++) {
            UIComponent component = componentList.get(p);
                System.out.println("The Component ID is:"+component.getId());
        }
        return true;
}

那么除了上述方法之外,有谁知道我可以在哪里寻找我的组件?

4

1 回答 1

0

这不是收集提交值的正确方法。

相反,您应该将组件的 value 属性绑定到 bean 属性。例如

UIInput input = new HtmlInputText();
input.setId("input1");
input.setValueExpression("value", createValueExpression("#{bean.input1}", String.class));
form.getChildren().add(input);

这样,JSF 只会以通常的方式更新 bean 属性。

private String input1; // +getter+setter

public void submit() {
    System.out.println(input1); // Look, JSF has already set it.
}

您可以利用Map<String, Object>属性来带来更多动态。

也可以看看:

于 2012-09-18T14:09:18.140 回答