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是您的<tr:form>.

于 2013-02-28T18:47:03.443 回答