我已經得到了這段代碼,它並不完全符合我的想法。我嘗試通過Ajax設置屬性,然後重新渲染一個組件。我.xhtml看起來像這樣渲染<h:panelGroup> by jsf中的ajax
<h:form>
<h:commandButton value="Render!" >
<f:ajax render=":result" listener="#{eFindUser.findUser}" />
</h:commandButton>
</h:form>
<h:panelGroup id="result" layout="block" rendered="#{eFindUser.responseRendered}" >
This is some text that is supposed to be rendered later
</h:panelGroup>
支持bean看起來像這樣
@Named(value = "eFindUser")
@ViewScoped
public class EFindUserManagedBean implements Serializable{
private boolean responseRendered = false;
/**
* Creates a new instance of EFindUserManagedBean
*/
public EFindUserManagedBean() {
}
public void findUser(AjaxBehaviorEvent abe) {
responseRendered = !responseRendered;
System.out.println("finding..... ("+ responseRendered+")" + this);
}
public boolean isResponseRendered() {
return responseRendered;
}
public void setResponseRendered(boolean responseRendered) {
this.responseRendered = responseRendered;
}
}
當我再次點擊該按鈕時,該屬性沒有改變。有一個在SERVERLOG消息,該消息稱
INFO: finding..... (true)[email protected]
INFO: finding..... (true)[email protected]
顯然有一些問題與託管bean,因爲它創建的每個有即使它應該是視圖範圍的請求的時間。
我應該改變什麼,以便panelgroup(id:「result」)可以改變它的可見性?沒有richfaces或任何其他技術允許。
非常感謝你對你的答案
雖然不適用於我。可能是因爲我在使用CDI.Yes!而已。 CDI沒有查看範圍。結合Alexandre Lavoie的回答,我得到了它的工作,謝謝。 – 2013-05-05 20:28:03