我有一個相當大的數據採集表單。主要的問題是我總是需要點擊提交按鈕兩次才能提交表單。我第一次按它,它只是刷新,什麼都不做。這是爲什麼?在我的表格裏面,有很多輸入文字。爲什麼我必須點擊我的提交按鈕兩次?
還有一些動態選擇菜單,其中的項目列表根據不同菜單中的選定項目而變化。我的懷疑是因爲有valueChangeListener,onchange =「submit()」和immediate =「true」,所以問題在於此,可能會有一些我不太明白的副作用。雖然我沒有收到任何錯誤消息。任何人都面臨過這樣的問題?
<h:commandButton type="submit" value="Add Job Profile" action="{formBean.commitData}"/>
public void commitData() {
QueryRunner run = new QueryRunner(ds);
String insertSql = "sql command here";
try {
int numberOfCommits = run.update(insertSql);
if (numberOfCommits > 0) {
JOptionPane jop = new JOptionPane("Inserted " + numberOfCommits +"record");
JDialog dialog = jop.createDialog("Upload complete");
dialog.setAlwaysOnTop(true);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} else {
JOptionPane jop = new JOptionPane("Upload failed. Please try again.");
JDialog dialog = jop.createDialog("Upload failed");
dialog.setAlwaysOnTop(true);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
}
} catch (SQLException sqle) {
sqle.printStackTrace();
}
}
我第一次點擊時甚至沒有收到上傳失敗的消息。第二次點擊時,上傳成功。
編輯:是的,這是動態的選擇菜單。如果我刪除這些菜單,我可以在第一次點擊時提交。不過,我該如何解決這個問題?
<h:outputLabel value="Family: " />
<h:selectOneMenu id="selectFamily"
value = "#{formBean.selectedFamily}"
valueChangeListener="#{menuBean.changeFamily}"
onchange="submit()"
immediate = "true" >
<f:selectItems id="familyNames" value="#{menuBean.familyNames}" />
</h:selectOneMenu>
<h:outputLabel value="Function: " />
<h:selectOneMenu id="selectFunction"
value="#{formBean.selectedFunction}"
immediate="true" >
<f:selectItems id="functionNames"
value="#{menuBean.functions}" />
</h:selectOneMenu>
// listen for family change and render relevant function
public void changeFamily(ValueChangeEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
String value = (String) event.getNewValue();
switchFunctions(value);
context.renderResponse();
}
你試過在按鈕上設置immediate =「true」嗎? – Steven 2010-10-28 04:48:08
已經這樣做了,這使事情變得更糟。在我的輸入字段中,所有內容都傳遞爲null。 – 2010-10-28 06:07:33