2012-05-10 53 views
0

我基本上有兩個問題。如何使用Ajax或無Ajax提交jsf中的兩個表格

當我按下Form1中的按鈕,它工作正常,但我看不到來自FacesContext的消息。 另一個問題是在Form2中。當我只按一次按鈕,它會進入服務器,但沒有任何反應,不提交。但是當我第二次按下它時,它工作正常。當然,在形式1中也有同樣的問題,我看不到來自FacesContext的消息。能否請你幫忙,告訴我是什麼原因造成的,或者是否有另一種解決方案,讓一個頁面內有多種形式?

    <p:tabView> 
         <p:tab title="Form1"> 
          <h:form id="form1"> 
           <p:inputText id="txtInput" value="#{controller.selected.defaultLayout}" /> 
           <h:commandButton value="Submit other form" action="#{controller.createMenu()}"> 
            <f:ajax execute="@form" render="@form" /> 
           </h:commandButton> 

          </h:form> 
         </p:tab> 
         <p:tab title="Form2"> 
          <h:form id="form2"> 
           <p:inputText id="txtInput2" value="#{controller.selected.defaultTheme}" /> 
           <h:commandButton value="Submit other form" action="#{controller.createMenu2()}"> 
            <f:ajax execute="@form" render="@form" /> 
           </h:commandButton> 
          </h:form> 
         </p:tab> 
        </p:tabView> 

控制器:

public String createMenu() { 

     Menu menu = current.getMenuMenuId(); 


     try { 
      //current.getMenuMenuId().setMenuCreated(true); 
      //getFacade().edit(current); 
      JsfUtil.addSuccessMessage(ResourceBundle.getBundle("resources/Bundle").getString("MenuCreated"));-----> never visible! 

      return ""; 
     } catch (Exception e) { 
      JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("resources/Bundle").getString("PersistenceErrorOccured")); 
      return null; 
     } 

    } 

編輯:我把外標籤都有效出,然後在頁面不能正常工作了,然後我得到的錯誤信息:

javax.faces.FacesException: <f:ajax> contains an unknown id ':form2' - cannot locate it in the context of the component j_idt77 
    at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.getResolvedId(AjaxBehaviorRenderer.java:285) 
    at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.appendIds(AjaxBehaviorRenderer.java:272) 
    at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.buildAjaxCommand(AjaxBehaviorRenderer.java:214) 
    at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.getScript(AjaxBehaviorRenderer.java:86) 
    at javax.faces.component.behavior.ClientBehaviorBase.getScript(ClientBehaviorBase.java:103) 

謝謝! Sami

回答

1

嵌套表單不是有效的html。這會導致意外的行爲。刪除外部表單並查看您的問題仍然存在。

更新:

Primefaces tabview也可以不使用窗體。但是,如果您的選項卡中有輸入元素和命令按鈕,則需要一個表單。但這是一個html要求,而不是PF的具體規定。您應該只刪除外部窗體而不是內部窗體。請用您當前的版本更新您的問題。

+0

Primefaces要求選項卡應該被表單包圍。然而,我試圖採取形式,我得到這個:包含一個未知的ID':form2' - 無法找到它在組件j_idt78的上下文中。感謝評論! – Sami

+0

更新了我的答案! –

+0

我把外面的標籤關了,沒有成功:) – Sami