2013-02-28 6 views
0

Я хотел бы получить пользовательский ввод от компонента в моем Java-коде. Что-то похоже на textbox.text в aspx/.NET. Я нахожу документацию очень запутанной, и мои попытки не компилируются. Есть ли способ?Подключить пользовательский ввод JSPX непосредственно от тринидада UIXComponent в моем Java-коде?

<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.

Вам нужен способ, чтобы справиться с 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>.

+0

Мне нужно вывести дату, чтобы вставить ее в сообщение об ошибке. Я унаследовал какой-то вонючий код. Что касается привязки значения к processScope, я не знаю, почему это было сделано и боятся неизвестных последствий его изменения. – cmac

+0

Вы взглянули на добавление пакета сообщений? (http://stackoverflow.com/a/15122278/880619) –

+0

Вы также можете проверить 'RequestContext.getCurrentInstance(). getPageFlowScope()', который, вероятно, будет содержать объект «выгоду». См. Также http://myfaces.apache.org/trinidad/trinidad-api/apidocs/org/apache/myfaces/trinidad/context/PageFlowScopeProvider.html –