Zk获取子组件mvvm的值

时间:2014-08-18 02:49:23

标签: mvvm zk

包含显示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。

1 个答案:

答案 0 :(得分:2)

可能的问题:

因为你说的是​​null而不是NullPointerException我认为当你创建新的时候,你的名字没有设置。

protected UwmtRiskWebVO riskWebVO = new UwmtRiskWebVO();

第二次调整:

您是否使用MVVM或MVC,但要做出选择。您不应该不能extends SelectorComposer<Component>然后在zul中应用BindCoomposer

调整:

MotorQuotationViewModel扩展BaseController时,您不必在BaseController中设置basicInfo.zul,因为包含内的每个内容都会监听虚拟机。

重复的名称:

通过阅读部分调整,您现在了解到您已拨打vm两次vm。你觉得巫婆VM怎么样? 请注意即使在包含中您设置的名称。