我正在为我的应用程序使用 JSF v1.2。这是与此线程(由 BalusC 回答)类似的问题,我在几天前将其标记为已回答。
JSF 1.2 生命周期理解:在InvokeApplication阶段执行ValueChangeListener方法
dataTable
这次不,只有一个带有 a 和 a 的表单,其中dropdown
包含panelgrid
some outputText
。根据用户选择的值,必须填充其中的dropdown
一些outputText
字段。panelGrid
下面是下拉菜单的代码:
<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>
关于更改下拉值;我想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());
}
代码运行良好,但不知道为什么:(
我的理解:应该显示 Integer ie 0 和 String ie null 的默认值
为什么
thedropdown
和 theoutputText
都存在于form
元素中。当表单在下拉值更改时提交时,出现在的字段的值将panelGrid
设置为默认值,即 for integer
,component#submittedValue 将是0
并且 forString
它会是null
。由于我没有任何转换器/验证器,因此 component#Value 也将是0
forinteger
和null
for String
。然后ValueChangeEvent
将被执行,所有的值都panelGrid
根据从数据库中获取的值设置为内容。然后在第 4 阶段,由 db hit 在第 3 阶段设置的所有这些值应根据在转换器/验证器之后设置的 component#value 重置为其默认值,因此它应该0
用于integer
并且null
对于String
. 那么为什么正确填充值而不是默认值呢?
再次在概念上停留在生命周期事件上:(请指出我在误解中遗漏的内容。