提交以编程方式创建的jsf表单

时间:2013-11-21 16:43:38

标签: jsf commandbutton commandlink

我在辅助bean上创建了jsf表单。我创建了表单,它在屏幕上显示成功的值。当我单击sumbit按钮时,使用ActionEvent调用backing bean方法,但更新的输入值不会提交给后端。 Backign bean实体对象值不会更新。

有什么不对吗?非常感谢您的帮助,

溴。 拉马

HtmlForm form = new HtmlForm();
form.setId(appletWrapper.getName()+"_FORM");

PanelGrid panelGrid = (PanelGrid)createComponent(PanelGrid.COMPONENT_TYPE);
form.getChildren().add(panelGrid);
panelGrid.setColumns(4);
panelGrid.setId(appletWrapper.getName()+"_FORM_PANEL");

for (FieldWrapper fieldWrapper : appletWrapper.getFields()) {
    panelGrid.getChildren().add(new UIFieldLabel(fieldWrapper).component(entities));
    panelGrid.getChildren().add(newFieldComponent(fieldWrapper, entities));
}

HtmlPanelGroup panelGroup = new HtmlPanelGroup();
panelGroup.setId(appletWrapper.getName()+"_PANEL_GROUP");
panelGrid.getFacets().put("footer", panelGroup);

CommandButton commandButton = new CommandButton();
panelGroup.getChildren().add(commandButton);
commandButton.setId(appletWrapper.getName()+"_UPDATE");
commandButton.setAjax(true);
commandButton.setValue("update");
commandButton.setProcess("@this");
commandButton.setType("submit");
MethodExpression updateEntityME = createMethodExpression("#{mainBean.entityUpdateListener}", null, new Class[] {ActionEvent.class });
commandButton.addActionListener(new MethodExpressionActionListener(updateEntityME));

return form;

已编辑:我为所有组件提供了固定ID。

我的一个副总统就像这样;

InputText inputText = (InputText)createComponent(InputText.COMPONENT_TYPE);
inputText.setId(fieldAlphanumericWrapper.getName());
inputText.setValueExpression("value", createValueExpression("#{mainBean.selection."+fieldAlphanumericWrapper.getProperty()+"}", Object.class));
return inputText;

我的支持bean目标方法;

public void entityUpdateListener(ActionEvent actionEvent) {
    TAccount tAccount = (TAccount)getSelection();
    System.out.println("tAccount.gettWebsite():"+tAccount.gettWebsite());
}

主要问题是实际上;当我按下commandButton时,不会调用mainBean.setSelection,因此不会更新支持bean对象。我无法通过actionEvent实例获取更新的对象实例。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案,问题的原因是这一行;

commandButton.setProcess("@this");

我已经改变了这个问题并解决了问题。

commandButton.setProcess("@form");

溴。 拉马