2012-08-25 55 views
1

我有一個充滿信息的數據表。在選定的一個rown上調用「onRowSelect」方法。 「訂單號」outputText條目填充了從ProductOrder對象檢索的值。從jsf頁面重新更新域的對象屬性

/* Filter bean */ 
public void onRowSelect(SelectEvent event) { 
    NewOrderBean currentOrder = (NewOrderBean) FacesUtils 
      .getManagedBean("newOrderBean"); 
    currentOrder.setOrderNum(((ProductOrder) event.getObject()).getOrderNum()); 
} 

/* newOrderBean */ 
public int update() { 
    ProductOrder pt = new ProductOrder(); 
    try { 
     pt = productService.findOrderbyNum(orderNum).get(0); 
    } catch (Exception e) { 
     return 0; 
    } 

    pt.setOrderNum(orderNum); 

    try { 
     FacesMessage msg = new FacesMessage("Product updated with: ", orderNum); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
     return 1; 
    } catch (Exception e) { 
     return 0; 
    } 
} 

用戶在輸入新的文本到「訂單號」後,按下更新修改產品訂單號。

<!-- JSF page --> 
<ui:define id="content" name="contentBody"> 
    <h:form class="ViewResservation" id="viewPanel"> 
     <p:tabView id="tabView"> 
      <p:tab title="Client" id="tab1"> 
        <h:outputText value="Order number " /> 
       <p:inputText id="ordr" value="#{newOrderBean.orderNum}" /> 
       </p:tab> 
      </p:tabView>  
    </h:form> 
</ui:define>   
    <ui:define name="footer"> 
     <h:form> 
      <h:commandButton value="Update" 
       actionListener="#{newOrderBean.update}" /> 
     </h:form> 
    </ui:define> 

問題是,輸入新文本並按下更新後,value(orderNum)保持不變。我如何獲得用戶輸入的值,並使用新的訂單號更新ProductOrder對象?

回答

1

該選項卡必須位於tabview元素內。你有倒過來。

對於您的問題,您的訂單號設置爲一種形式,您的提交按鈕設置爲另一種形式。您需要將兩者都放在相同的格式中,否則訂單號不會被提交。

+0

是的,它的工作原理,謝謝siebz0r。我注意到,在我的情況下,每次按「更新」並選擇其中一行時。頁面刷新和onRowSelect方法再次被調用。爲什麼會發生? – alex

+0

我不知道頁面刷新的原因。 onRowSelect可能被調用,因爲ajax事件的形式相同,但我不確定這一點。此外,如果我的答案回答您的問題,請將其標記爲已接受。 ;-) – siebz0r

+0

是的,當然是男人。你幫了我很多! – alex