У меня довольно обширная форма для сбора данных. Основная проблема заключается в том, что мне всегда нужно дважды щелкнуть кнопку отправки, чтобы форма была отправлена. В первый раз, когда я его нажимаю, он просто освежает и ничего не делает. Почему это так? В моей форме есть много входного текста.Почему я должен дважды нажимать кнопку отправки?
Есть также некоторые меню динамического выбора, в которых его список элементов изменяется в зависимости от выбранного элемента в другом меню. Мое подозрение заключается в том, что проблема заключается здесь в том, что существуют valueChangeListener, onchange = "submit()" и direct = "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();
}
}
Я даже не получил сообщение об ошибке при первом нажатии. При втором нажатии загрузка выполняется успешно.
EDIT: Это динамические меню выбора. Я могу отправить первый клик, если я удалю эти меню. Но как я могу это решить?
<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();
}
Вы пробовали установить немедленное = "true" на кнопку? – Steven
yup уже сделал это, и это еще больше ухудшило ситуацию. все передается как null в моих полях ввода. –