0

Java コード内のコンポーネントからユーザー入力を取得したいと考えています。aspx/.NET の textbox.text に似たもの。ドキュメントが非常に紛らわしく、私の試みはコンパイルされません。方法はありますか?

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

1 に答える 1

0

何を達成しようとしているのかわかりませんが、すでに値バインディング(#{processScope.benefit.serviceDate})があり、そこにあるので、を使用したいように見えonchange="submit();"ます。<tr:inputDate>valueChangeListener

Beanの値変更イベントを処理するメソッドが必要です。次に例を示します。

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

また、ネーミングコンテナを考慮する必要があります。次のようなものを使用する必要がありますviewRoot.findComponent("formId:date");。この場合formIdはあなたのIDです<tr:form>

于 2013-02-28T18:47:03.443 に答える