gpt4 book ai didi

java - 如何检索动态生成的表单的提交值?

转载 作者:行者123 更新时间:2023-11-30 09:50:40 26 4
gpt4 key购买 nike

我需要做一个应用程序,允许最终用户创建自己的表单(删除复选框、输入文本等)并保存该表单,然后用户可以打开表单并在表单元素中写入值以供打印表格。我正在使用 icefaces,我在托管 bean 中做了一些事情:

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);

我可以在表单中添加元素,然后保存在数据库中,然后重新创建表单,但我不知道如何从每个元素中检索提交的值。

最佳答案

将值绑定(bind)到 Map<String, Object>属性(property)。

例如

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

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

然后你可以通过values.get(field.getName())获取action方法中提交的值.

另见:

关于java - 如何检索动态生成的表单的提交值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5043329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com