直接从我的Java代码中的trinidad UIXComponent获取JSPX用户输入?

时间:2013-02-28 15:59:23

标签: user-input myfaces jspx trinidad

我想从我的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

1 个答案:

答案 0 :(得分: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。