包含显示null Not component的组件值。
<window id="win" width="100%" border="normal" height="100%"
apply="org.zkoss.bind.BindComposer" validationMessages="@id('vmsgs')"
viewModel="@id('vm') @init('com.customer.portal.controller.MotorQuotationViewModel')">
<row>
<include src="basicInfo.zul"></include>
</row>
<row>
<button id="btnCalculatePremium"
onClick="@command('calculatePremium')" />
</row>
basicInfo.zul
<window id="win" width="100%" border="normal" height="100%"
apply="org.zkoss.bind.BindComposer" validationMessages="@id('vmsgs')"
viewModel="@id('vm') @init('com.customer.portal.controller.BaseController')">
<grid>
<rows>
<row>
<label id="lblBasicInfo"></label>
</row>
<row id="rowIdType">
<label id="lblIdType"></label>
<textbox id="txtIdType" inplace="true"
value="@bind(vm.riskWebVO.VName)" constraint="no empty" />
</row>
</rows>
</grid>
</window>
主视图模型
public class MotorQuotationViewModel extends BaseController {
public void calculatePremium() {
logger.info(riskWebVO.getVName());//Showing null
}
public UwmtRiskWebVO getRiskWebVO() {
return riskWebVO;
}
public void setRiskWebVO(UwmtRiskWebVO riskWebVO) {
this.riskWebVO = riskWebVO;
}
}
子视图模型
public class BaseController extends SelectorComposer<Component>{
protected UwmtRiskWebVO riskWebVO = new UwmtRiskWebVO();
public UwmtRiskWebVO getRiskWebVO() {
return riskWebVO;
}
public void setRiskWebVO(UwmtRiskWebVO riskWebVO) {
this.riskWebVO = riskWebVO;
}
}
当我获得主视图模型的值时,它会绑定值,但是当我试图获取包含组件的值时,它显示为null。
答案 0 :(得分:2)
因为你说的是null
而不是NullPointerException
我认为当你创建新的时候,你的名字没有设置。
protected UwmtRiskWebVO riskWebVO = new UwmtRiskWebVO();
您是否使用MVVM或MVC,但要做出选择。您不应该不能extends SelectorComposer<Component>
然后在zul中应用BindCoomposer
。
当MotorQuotationViewModel
扩展BaseController
时,您不必在BaseController
中设置basicInfo.zul
,因为包含内的每个内容都会监听虚拟机。
通过阅读部分调整,您现在了解到您已拨打vm两次vm
。你觉得巫婆VM怎么样?
请注意即使在包含中您设置的名称。