在我的JSF頁面上,我在dataTable
中顯示一個簡單的數據庫表。我希望能夠編輯此表中的行。作爲解決方案,當您單擊第一列中的值時,我會彈出一個對話框。我使用setPropertyActionListener
在我的支持bean中設置當前行/實體。這似乎工作。但是,彈出式窗口會在幾分之一秒後消失。我不明白這是爲什麼。有沒有人有建議?JSF對話框立即消失
這裏是我的DataTable的JSF碼:(你可以看到我使用PrimeFaces)
<h:form id="dataForm">
<p:dataTable value="#{misterBean.values}" var="value">
<p:column>
<h:commandLink value="#{value.name}" onclick="updateDlg.show()">
<f:setPropertyActionListener
target="#{misterBean.value}"
value="#{value}" />
</h:commandLink>
</p:column>
<!-- more columns -->
</p:dataTable>
</h:form>
,並在該對話框的JSF代碼:
<p:dialog id="updateDialog" header="Update data" widgetVar="updateDlg">
<h:form id="updateForm">
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel for="name" value="Name:" />
<p:inputText id="name" value="#{misterBean.value.name}" />
<h:outputLabel for="flag" value="Flag:" />
<p:selectBooleanButton id="flag"
value="#{misterBean.value.flag}"
onLabel="On"
offLabel="Off" />
<f:facet name="footer">
<p:commandButton id="submitButton"
value="Submit"
actionListener="#{misterBean.update}"
oncomplete="updateDlg.hide()"
update=":dataForm" />
</f:facet>
</h:panelGrid>
</h:form>
</p:dialog>
的後盾bean看起來像這樣:
@Controller
@ManagedBean(name = "misterBean")
@ViewScoped
public final class MisterBean {
private final MyService myService;
private final List<Value> values;
private Value value;
@Autowired
public MisterBean(final MyService myService) {
this.myService = myService;
this.values = this.myService.loadValues();
this.value = new Value();
}
public List<Value> getValues() {
return this.values;
}
public Value getValue() {
return this.value;
}
public void setValue(final Value value) {
this.value = value ;
}
public void update(final ActionEvent e) {
this.myService.save(this.value);
this.value = new Value();
}
}
又有怎樣的 'updateDlg.show()' 你的javascript代碼?告訴我,如果我錯了,但onClick只能調用客戶端JavaScript方法。 'updateDlg.hide()'也是一樣。 – reporter
我在不同的頁面上做了同樣的工作,它在那裏工作。無論如何:我實際上看到對話非常簡短,所以我猜'show()'起作用了。我承認我不知道這是如何工作的。 – Rinke
您正在同步提交表單,而不是由ajax異步提交。 – BalusC