У меня довольно большая форма для сбора данных.Основная проблема заключается в том, что мне всегда придется дважды нажимать кнопку отправки, чтобы форма была отправлена.Когда я нажимаю в первый раз, он просто обновляется и ничего не делает.Почему это так?Внутри моей формы много входного текста.
Существуют также некоторые динамические меню выбора, в которых список пунктов меняется в зависимости от выбранного элемента в другом меню.Я подозреваю, что проблема заключается в том, что есть valueChangeListener, onchange = "submit ()" и немедленное = "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();
}