我想从Java代码中的组件检索用户输入。类似于文本框。文本在aspx/. net。我发现文档非常混乱,我的尝试不编译。有办法吗?
<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
我不确定你想要实现什么,但是因为你已经有了一个值绑定(#{processScope.benefit.serviceDate}
),并且你在<tr:inputDate>
中有onchange="submit();"
,看起来你想要使用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>
的id。