Как я могу получить отправленные значения динамически сгенерированной формы? - PullRequest
2 голосов
/ 18 февраля 2011

Мне нужно создать приложение, которое позволит конечному пользователю создать свою собственную форму (флажки сброса, inputTexts и т. Д.), Сохранить эту форму, а затем пользователь сможет открыть форму и записать значения в элементы формы для последующей печати. форма. Я работаю с icefaces, и я делал что-то в управляемом бине:

javax.faces.component.UIViewRoot root = FacesContext.getCurrentInstance().getViewRoot();
            // find the form with its clientId.
            UIComponent a = root.findComponent("a");
            UIComponent b = a.findComponent("form");
            UIComponent form = b.findComponent("formulario");
            List children = form.getChildren();

if (tipo.equalsIgnoreCase("text")) {
                HtmlInputText inputText = new HtmlInputText();
                inputText.setId("text" + nro + (indice + 1));
                indice++;
                inputText.setValue("");
                inputText.setSize(tamanio);
                children.add(inputText);
                elemento = new Elemento(tipo, inputText.getId(), inputText.getValue().toString(), inputText.getSize());
            } else if (tipo.equalsIgnoreCase("textarea")) {
                HtmlInputTextarea inputTextArea = new HtmlInputTextarea();
                inputTextArea.setId("textarea" + nro + (indice + 1));
                indice++;
                inputTextArea.setValue("");
                inputTextArea.setCols(ancho);
                inputTextArea.setRows(alto);
                children.add(inputTextArea);
                elemento = new Elemento(tipo, inputTextArea.getId(), inputTextArea.getValue().toString(), (inputTextArea.getRows() * 10) + inputTextArea.getCols());
            } else if (tipo.equalsIgnoreCase("outputText")) {
                HtmlOutputText outputText = new HtmlOutputText();
                outputText.setId("outputText" + nro + (indice + 1));
                indice++;
                outputText.setValue(valor);
                children.add(outputText);
                elemento = new Elemento(tipo, outputText.getId(), outputText.getValue().toString(), 0);
            } else if (tipo.equalsIgnoreCase("table")) {
                HtmlDataTable table = new HtmlDataTable();
                table.setId("table" + nro + (indice + 1));
                indice++;
                // for (int k = 0; k < filas; k++) {
                for (int j = 0; j < columnas; j++) {
                    HtmlColumn column = new HtmlColumn();
                    column.setId("c" + j);
                    for (int i = 0; i < filas; i++) {
                        HtmlInputText inputColumn = new HtmlInputText();
                        inputColumn.setId("f" + i);
                        inputColumn.setValue("");
                        column.getChildren().add(inputColumn);
                    }
                    table.getChildren().add(column);
                }
                // }

                table.setValue("");
                table.setRows(filas);
                table.setColNumber(columnas);
                table.setResizable(true);
                children.add(table);
                elemento = new Elemento(tipo, table.getId(), table.getValue().toString(), (table.getRows() * 10 + table.getColNumber()));
            } else if (tipo.equalsIgnoreCase("checkbox")) {
                HtmlSelectBooleanCheckbox checkbox = new HtmlSelectBooleanCheckbox();
                checkbox.setId("checkbox" + nro + (indice + 1));
                indice++;
                checkbox.setValue("ON");
                children.add(checkbox);
                elemento = new Elemento(tipo, checkbox.getId(), checkbox.getValue().toString(), 0);
            } else if (tipo.equalsIgnoreCase("radio")) {
                HtmlSelectOneRadio radio = new HtmlSelectOneRadio();
                radio.setId("radio" + nro + (indice + 1));
                indice++;
                UISelectItems items = new UISelectItems();
                ArrayList arr = new ArrayList();
                HtmlInputText inputRadio = new HtmlInputText();
                inputRadio.setValue(" ");
                arr.add(new SelectItem(new Integer(0), inputRadio.getValue().toString()));
                items.setValue(arr);
                radio.setValue("ON");
                radio.getChildren().add(items);
                children.add(radio);
                elemento = new Elemento(tipo, radio.getId(), radio.getValue().toString(), 0);
            } else if (tipo.equalsIgnoreCase("panel")) {
                HtmlPanelGrid panel = new HtmlPanelGrid();
                panel.setId("panel" + nro + (indice + 1));
                indice++;
                children.add(panel);
                elemento = new Elemento(tipo, panel.getId(), "", 0);
            }
            elementosFormulario.add(elemento);

Я могу добавить элементы в форму, затем сохранить в БД, затем я могу воссоздать форму, но тогда я не знаю, как извлечь отправленные значения из каждого элемента.

1 Ответ

2 голосов
/ 18 февраля 2011

Привязать значения к свойству Map<String, Object>.

Например,

private Map<String, Object> values = new HashMap<String, Object>(); // +getter

с помощью

inputText.setValueExpression("value", createValueExpression("#{bean.values['" + field.getName() + "']}", String.class));

Затем можно получить отправленные значения в методе действия с помощьюvalues.get(field.getName()).

См. Также:

...