好PostConstruct方法,我使用的是ConversationScoped,我希望PostConstruct被稱爲只是一個時間在談話的開始,請參閱:ConversationScoped bean的呼籲在每次請求
@Named("disciplinaDetalheMB")
@ConversationScoped
public class DisciplinaDetalheMBImpl {
private static final long serialVersionUID = 1L;
@Inject
private Conversation conversation;
@Inject
@AnBasicBO
private BasicBO boPadrao;
@PostConstruct
public void postConstruct() {
logger.debug("Iniciando PostConstruct...");
init();
beginConversation();
}
public String salvarAndRedirecionar() {
salvar();
if (!FacesContext.getCurrentInstance().isValidationFailed()) {
return goToLastPage() + "?faces-redirect=true";
} else {
return "";
}
}
private void beginConversation() {
if (!conversation.isTransient()) {
endConversation();
}
conversation.begin();
if (conversation.isTransient()) {
throw new RuntimeException("A conversão não foi iniciada corretamente");
}
SessionContext.getInstance().setAttribute("cid", conversation.getId());
}
public BasicBO getBoPadrao() {
return boPadrao;
}
public void setBoPadrao(BasicBO boPadrao) {
this.boPadrao = boPadrao;
}
}
所以,當我支持bean是創建後,會話被初始化,CID存儲在會話中以供後續使用。我有一個命令「保存」在我的XHTML,當該按鈕被稱爲PostConstruct再次被調用,我不知道爲什麼:
<h:commandLink
action="#{managedBeanName.salvarAndRedirecionar()}"
styleClass="btn btn-info pull-right" value="Salvar">
<f:ajax execute="@form" />
</h:commandLink>
我注意到生成的HTML是:
<a id="formManterDisciplina:j_idt44:j_idt46" href="#" onclick="mojarra.ab(this,event,'action','@form',0);return false" class="btn btn-info pull-right" name="formManterDisciplina:j_idt44:j_idt46">Salvar</a>
所以,我明白「href =#」可以避免onlick被執行。我認爲這是問題,但我不知道如何解決。 Remenber:salvarAndRedirecionar()方法永遠不會被調用,因爲postConstruct總是在之前被調用。
2)我還有一個問題:如果我開始一個會話,並沒有結束,有一些問題?有時我不想手動結束對話,因爲我只有一頁,我剛開始。
這個班的範圍是什麼?爲什麼不向我們展示更多類的定義? –
這是第* n *次必須從[jsf]問題中刪除[java]標記的時間。你能否把這個提示作爲一個提示,在未來的[jsf]問題中不再添加[java]標籤?只有當你有一個可以在Java應用程序類中用'main()'方法重現的問題時才使用[java]標籤。如果您有這樣的問題,那麼您應該重新考慮[jsf]和其他Java EE相關標記的相關性。 – BalusC
對不起。 – RonaldoLanhellas