Java GWT中的动态表单
我正在GWT中构建动态表单,但我不确定如何在提交时动态检索这些值 我正在从数据库中读取有问题的数据,并手动构建添加到Java GWT中的动态表单,java,gwt,Java,Gwt,我正在GWT中构建动态表单,但我不确定如何在提交时动态检索这些值 我正在从数据库中读取有问题的数据,并手动构建添加到FormPanel中的元素: @UiField FormPanel formPanel; @Override protected void onLoad() { service.getFields(AysncCallbak<Fields> callback) { public v
FormPanel
中的元素:
@UiField
FormPanel formPanel;
@Override
protected void onLoad()
{
service.getFields(AysncCallbak<Fields> callback)
{
public void onSuccess(Fields result)
{
for(Object yo : fields.stuff())
{
Element div = DOM.createDiv();
div.appendChild(DOM.createInputText());
formPanel.getElement().appendChild(div);
}
}
}
}
@UiField
模板模板模板;
@凌驾
受保护的void onLoad()
{
service.getFields(AysncCallbak回调)
{
成功时公共无效(字段结果)
{
for(对象yo:fields.stuff())
{
Element div=DOM.createDiv();
div.appendChild(DOM.createInputText());
formPanel.getElement().appendChild(div);
}
}
}
}
这是psuedocode中的要点,但我不确定在这一点之后如何检索值
我想序列化表单(获取HTML)并用DOM解析它,但GWT生成无效的XHTML(输入标记未终止,导致解析失败)
我可以将数据发送到Servlet,但是我需要更多的东西(其他隐藏的输入字段,等等)
大多数GWT表单示例都非常简单,或者声明了显式字段。我应该看看第三方图书馆吗?如何获取动态值?GWT不是JSP。不是PHP 使用FormPanel是为了初学者,或者为了与现有的表单处理servlet兼容,或者为了快速而肮脏的任务。我不得不承认,我可能忘记了如何使用模板 一旦您能够快速使用表单,您可能希望转到RPC、RequestBuilder或RES,以便将数据提交到服务器 首先,在GWT中,除非绝对必要,否则应该避免获取小部件的元素(例如通过JSNI调整行为) 下面是一些可能不太精确的代码,但它让人明白了这一点
protected void onLoad() {
HashMap<String, Widget> formWidgetHash = new HashMap<String, Widget>();
FlexTable table = new FlexTable();
FormPanel form = new FormPanel();
form.setWidget(table);
service.getFields(AysncCallbak<Fields> callback) {
public void onSuccess(Fields result) {
int i = 0;
for(Object yo : fields.stuff()) {
mkFormWidget(formWidgetHash, table, i++, yo);
}
}
}
}
我不明白为什么在将表单发送到服务器之前需要访问这些小部件。如果需要添加字段验证器,则应在mkFormWidget中实例化时将其添加到表单小部件
但是,如果您希望对表单小部件具有位置和哈希键访问权限,您可以按照此问题的答案进行操作:。希望有人阅读此注释而不是“答案”。经验教训:不要显式地操作DOM,使用容器小部件,并存储对问题小部件的引用。
private void mkFormWidget(
HashMap formWidgetHash, FlexTable table, int row, Object yo) {
// LHS of table is field prompt
String prompt = resolvePrompt(yo);
table.setText(row, 0, prompt);
Widget formWidget;
if (yo instanceof Boolean){
formWidget = new CheckBox();
}
else { ...
}
else { ...
}
else {
formWidget = new TextBox();
}
table.setWidget(row, 1, w);
formWidgetHash.put(prompt, w);
}
abstract protected String resolvePrompt(Object o);