1
我已經在支持bean上創建了jsf表單。我已經創建了表單,它已成功顯示在屏幕上。當我點擊sumbit按鈕時,用ActionEvent調用backing bean方法,但更新後的輸入值不會提交給後端。 Backign bean實體對象值不會更新。正在提交以編程方式創建的jsf表格
有問題嗎?非常感謝您的幫助,
Br。 Ramazan
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的target方法;
public void entityUpdateListener(ActionEvent actionEvent) {
TAccount tAccount = (TAccount)getSelection();
System.out.println("tAccount.gettWebsite():"+tAccount.gettWebsite());
}
其實主要問題是:當我按下commandButton時,mainBean.setSelection沒有被調用,所以支持bean對象沒有更新。我不能通過actionEvent實例更新對象實例。
給所有表單,輸入和按鈕一個固定的ID,而不是讓JSF自動生成它。 – BalusC
感謝BalusC爲您的建議,我給了固定ID,但仍處於相同的情況。 –