0
這裏的情況是:JSF組件不再呈現,但FacesMessage就會保持
- 我有一個組件,它的值是我ViewScoped豆,它得到它做一些錯誤時產生的的FacesMessage的屬性的形式首先提交
- 在隨後的用戶動作,啊:commandlink被點擊時,它使用F:AJAX,和其的ActionListener設置爲不再被呈現
- 在接收到該效應初探的部件,所述部件是不再呈現(如預期的那樣),但FacesMessage仍然保留並顯示
我正在使用Mojarra JSF 2.1和IceFaces 3.0--儘管這個例子和有問題的行爲只能使用標準的JSF組件。下面是演示行爲的一個小例子:如果我改變的H
test.xhtml
<h:form id="testform">
<h:message for="tv"/>
<h:inputText id="tv" value="#{testBean.testVal}" rendered="#{testBean.testValRendered}" required="true" />
<h:commandButton value="Submit"/>
<h:commandLink actionListener="#{testBean.toggleTestVal}" value="Toggle input">
<f:ajax execute="@this" render="@form"/>
</h:commandLink>
</h:form>
豆代碼
@ViewScoped
@ManagedBean(name = "testBean")
public class TestBean {
private String testVal;
private boolean testValRendered;
public TestBean() {
testValRendered = true;
}
public String getTestVal() {
return testVal;
}
public void setTestVal(String testVal) {
this.testVal = testVal;
}
public boolean isTestValRendered() {
return testValRendered;
}
public void setTestValRendered(boolean testValRendered) {
this.testValRendered = testValRendered;
}
public void toggleTestVal(ActionEvent ae) {
testValRendered = !testValRendered;
}
}
:commandLink,以便它不使用f:ajax,並在其上設置immediate ='true',然後正確刪除該消息。雖然這在某些情況下可能會起作用,但我想要理解爲什麼使用f:ajax來渲染事物,如我在示例中所示不起作用。謝謝。
很公平,但對於我使用一個整個形式來代替,而不能只是有條件地呈現它的情況?你是說即使它未被執行,組件正在處理和驗證? –
nagohs
2013-04-08 19:20:34
標記您的答案接受,因爲它提供了我原來的問題的解決方案。但是,我想我真正希望得到的答案是爲什麼會發生這種情況,以及是否有任何其他方式讓消息自行「正常」地被刪除。看到我以前的評論。 – nagohs 2013-04-10 17:21:08