下面的代碼不會重新呈現形式:JSF呈現不起作用
XHTML:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
template="/WEB-INF/templates/default.xhtml">
<ui:define name="content">
<h:form id="form">
<rich:panel header="My Header">
<h2>
<h:outputLabel value="#{tournamentBean.mode}" />
</h2>
<a4j:commandButton value="Toggle"
action="#{tournamentBean.toggleMode()}" render="form" />
</rich:panel>
</h:form>
</ui:define>
</ui:composition>
豆:
import java.io.Serializable;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
@SuppressWarnings("serial")
@Named("tournamentBean")
@ViewScoped
public class TournamentBean implements Serializable {
private String mode = "A";
public String getMode() {
return mode;
}
public void toggleMode() {
if (this.mode.equals("A"))
this.mode = "B";
else
this.mode = "A";
}
}
我使用Wildfly 8.0,因此JSF 2.2。每次點擊按鈕時都會調用toggleMode方法。在IE 11中,它永遠不會放棄這種形式。在Chrome中,它可以運行兩次,但不會更多次。
我錯過了什麼?
雖然'render =「form」'應該可以工作,儘管只有RichFaces,因爲它使用'UIComponent#findComponent()'方法來定位組件,所以它顯然是低效的,並且'render =「@form」'應該總是用於重新渲染當前表單。 – skuntsel
顯示您的「/WEB-INF/templates/default.xhtml」,它是否可能包含的附加h:表單。 –
Andrey
感謝您的提示。 「來自」的「render =」@沒有幫助。而default.xhtml非常簡單。沒有形式或任何特別的東西 – Dave