我正在为我的应用程序使用JSF v1.2。这是对这个线程的类似问题(由BalusC回答),我标记为几天前回答。JSF 1.2生命周期理解:执行ValueChangeListener#2
没有dataTable
这个时候,只能用dropdown
和含有一些outputText
一个panelgrid
的形式。基于用户选择的dropdown
值,必须填写panelGrid
中存在的一些outputText
字段。
下面是下拉的代码:
<h:selectOneMenu id="drpDownLoans" value="#{loanBean.loanId }" valueChangeListener="#{loanBean.getLoanDetails }" onchange="submit()">
<f:selectItem itemLabel="--Select--" itemValue="0"/>
<f:selectItems value="#{loanBean.availableLoans }"/>
</h:selectOneMenu>
在改变下拉值;我想填充从DB一些outputText
,下面是代码:
<h:panelGrid columns="2">
<h:outputLabel id="lblLoanId" value="Loan Id"></h:outputLabel>
<h:outputText id="txtLoanId" value="#{loanBean.loanId }"></h:outputText>
<h:outputLabel id="lblROI" value="Rate of Interest (% pa)"></h:outputLabel>
<h:outputText id="txtROI" value="#{loanBean.rateOfInterest }"></h:outputText>
<h:outputLabel id="lblNOI" value="No. of Installments (months))"></h:outputLabel>
<h:outputText id="txtNOI" value="#{loanBean.noOfInstallments }"></h:outputText>
</h:panelGrid>
下面是在LoanBean.java执行的代码:
public void getLoanDetails(ValueChangeEvent event){
Integer value = (Integer)event.getNewValue();
DataService service = new DataService();
LoanBean loanBean = service.getLoanDetails(value);
this.setLoanId(loanBean.getLoanId());
this.setRateOfInterest(loanBean.getRateOfInterest());
this.setNoOfInstallments(loanBean.getNoOfInstallments());
}
的代码可以正常使用,但不知道为什么:(
我的理解:应显示为整数,即0和字符串即空的默认值
WHY
无论是dropdown
和outputText
存在于form
元件。当表单按照下拉值变化提交时,则panelGrid
中出现的字段的值被设置为默认值,即,对于integer
,组件#submittedValue将是0
,并且对于String
,它将是null
。由于我没有任何转换器/验证器,对于String
,对于integer
和null
,组件#值也将为0
。然后将执行ValueChangeEvent
,并根据从数据库中提取的值将所有值设置为panelGrid
内容。然后在阶段4中,基于在转换器/验证器之后设置的组件#值,所有在阶段3中由db命中设置的这些值应该被重置为它们的默认值,因此对于String
,它应该是0
对于integer
和null
。那为什么这些值正确填充而不是默认值?
又一次概念停留在生命周期的活动:(请PIN-ponit我在我的错误理解是缺少
至于我明白你的问题不是关于生命周期。您要相应地从SelectOneMenu中填充h:panel。我是不是? – erencan 2013-05-10 12:54:00