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