2013-02-11 2 views
0

мой текущий код.JSF: вызов javascript после успешного создания

<h:form> 
    <h:panelGroup id="messagePanel" layout="block"> 
     <h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/> 
    </h:panelGroup> 
    <h:panelGrid columns="2"> 

     // some form input stuff here.. 

    </h:panelGrid>   

    <h:commandButton class="register-btn" action="#{accountController.create}" value="#{bundle.Register}"> 
     <f:ajax event="action" execute="@form" render="messagePanel"/> 
    </h:commandButton>      
</h:form> 

messagePanel, где отображаются ошибки проверки.

создать метод()

public String create() { 
     try { 

      getFacadeUser().create(currentUser); 

      FacesContext.getCurrentInstance().getExternalContext().redirect("/index.xhtml"); 
      return null; 
     } catch (Exception e) { 
      JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured")); 
      return null; 
     } 
    } 

можно ли вызвать JavaScript после успешного создания? в настоящее время моя форма создания - это всплывающее модальное, я хочу просто скрыть модальность после успешного создания, а не перенаправить на страницу.

я использую JSF 2.1

+1

Чтобы быть ясным, вы хотите вызвать некоторые JS на перенаправленной странице '/ index.xhtml'? – BalusC

+0

Если вы перенаправили пользователя на 'index.xhtml', ваш диалог не существует на этой странице. Что вы скроете? – partlov

+0

Нет, в настоящее время мой код перенаправляет страницу после создания, я не хочу этого. вместо этого, на той же странице я просто хочу закрыть всплывающее модальное, содержащее форму – galao

ответ

0

Со стандартным JSF (читать: нет библиотеки компонентов или служебные библиотеки, такие как PrimeFaces или OmniFaces, которые имеют способы сделать это проще), ваш лучший выбор - условно отобразить элемент <script>.

<h:panelGroup id="script"> 
    <h:outputScript rendered="#{not empty accountController.currentUser.id}"> 
     alert('User successfully created!'); 
    </h:outputScript> 
</h:panelGroup> 

Ссылка на него в <f:ajax ... render="script">.

+0

ох, хм .. если я реализую простые шрифты? есть ли более простой и эффективный способ сделать это? – galao

+0

'RequestContext # execute()'. Кстати ... Вы не говорите: «Я реализую PrimeFaces». Cagatay Civici - единственный, кто это делает. Вы должны сказать: «Я использую PrimeFaces» или «Я устанавливаю PrimeFaces». – BalusC

0

Вы можете создать компонент для связывания вашего диалога в управляемом компоненте и скрыть диалог с вашей функции с помощью этого связывания. Я думаю, что тип объекта, который представляет привязку вашего компонента, является специфичным для платформы (хотя все они, вероятно, расширяют UIComponent), поэтому вам нужно указать, какую реализацию JSF вы используете для полного решения. Например, я использовал этот очень практичный пример в ADF.

Это пример из АПД:
<af:popup id="sample" binding="#{viewScope.myBean.myPopup}">

и в управляемом компоненте:
RichPopup myPopup;
...
public void onSave() {
//save user
myPopup.hide();
}

+0

.......... код? – kolossus

+0

Это больше похоже на комментарий, чем на прямой ответ. –

+0

hmm, любой пример кода? – galao

Смежные вопросы