2013-02-28 15 views
0

我想從我的Java代碼中的組件檢索用戶輸入。類似於aspx/.NET中的textbox.text。我發現文檔非常混亂,我的嘗試不能編譯。有沒有辦法?在我的Java代碼中直接從trinidad UIXComponent獲取JSPX用戶輸入?

<tr:inputDate id="date" required="true" 
      inlineStyle="color:rgb(0,58,117); font-weight:bold;" 
      value="#{processScope.benefit.serviceDate}" 
      immediate="false" 
      onchange="submit();" 
      label="#{mb_ResourceBean.res['claim.serviceDate.label']}"> 

      <tr:convertDateTime pattern="yyyy/MM/dd" secondaryPattern="yyyyMMdd" 
       type="date"/> 

    <tr:validateDateTimeRange minimum="#{bk_ClaimBean.minDate}" 
         maximum="#{bk_ClaimBean.maxDate}"/> 

    </tr:inputDate> 

差半企圖搶輸入:

 UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot(); 
    UIXComponent component = viewRoot.findComponent("date"); //does not compile 

回答

0

我不知道你想達到什麼樣的,但既然你已經有了一個值綁定(#{processScope.benefit.serviceDate}),你有onchange="submit();"在您的<tr:inputDate>看起來像您想要使用valueChangeListener

您需要一種方法來處理你的bean的value change event,例如:

public void dateChanged(ValueChangeEvent event) 
{ 
    System.out.println("New value: "+ event.getNewValue()); 
    System.out.println("instanceof Date: "+ (event.getNewValue() instanceof Date)); 
} 

在你jspx必須添加監聽器。你可能也想使用autoSubmit="true",而不是onchange="submit();",例如:

<tr:inputDate value="#{myBean.myDate}" 
       valueChangeListener="#{myBean.dateChanged}" 
       immediate="true" autoSubmit="true"/> 

在你的問題中的代碼無法編譯,因爲viewRoot.findComponent()將返回UIComponent。您需要將它投射到UIXComponent

此外,您需要考慮naming containers。您需要使用以下內容:viewRoot.findComponent("formId:date");。在這種情況下,formId是您的<tr:form>的ID。

+0

我需要拉出日期以將其插入到錯誤消息中。我繼承了一些臭的代碼。至於將價值綁定到processScope,我不知道爲什麼這樣做,並擔心改變它的未知含義。 – cmac 2013-02-28 19:15:18

+0

您是否看過添加消息包? (http://stackoverflow.com/a/15122278/880619) – 2013-02-28 19:36:29

+0

您也可以查看'RequestContext.getCurrentInstance()。getPageFlowScope()',這可能會持有'benefit'對象。另請參閱http://myfaces.apache.org/trinidad/trinidad-api/apidocs/org/apache/myfaces/trinidad/context/PageFlowScopeProvider.html – 2013-02-28 19:51:44