Что ж, я использую ConversationScoped и надеюсь, что PostConstruct вызывается только один раз в начале разговора, см.
@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;
}
}
Таким образом, когда мой резервный компонент создается, диалог инициализируется, а CID сохраняется в сеансе для последующего использования. У меня есть commandButton «сохранить» в моем 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. Я думаю, что это проблема, но я не знаю, как исправить. Напоминаем: метод salvarAndRedirectionar() никогда не вызывается, потому что перед ним всегда вызывается postConstruct.
2) У меня есть еще вопрос: если я начинаю разговор и не заканчиваю, есть какая-то проблема? Иногда я не хочу заканчивать разговор вручную, потому что у меня есть только ОДНА СТРАНИЦА, я только начинаю.
main()
. Если у вас есть такая проблема, вам следует пересмотреть актуальность [jsf] и других тегов, связанных с Java EE. - person BalusC   schedule 19.10.2015