ognl.OgnlException: source is null for getProperty(null, "0")

在使用struts2 提交表单时出现Error setting expression 'extendList[2].extendtypevalue' with value '[Ljava.lang.String;@7ac9a7'
ognl.OgnlException: source is null for getProperty(null, "0")异常,但后台extend.extendtypevalue却有值,而且表单界面也能读出值。

private AssetsList entity;
@Override
public AssetsList getModel() {
	return entity;
}


<s:iterator value="extendList" id="extend" status="status">
	<tr>
		<td class="asset_frm_label">${extend.extendcname}</td>
		<td>
			<s:textfield id="%{#extend.extendtypevalue}"
				name="extendList[%{#status.index}].extendvalue" size="15" 
				cssClass="k-textbox" value="%{#extend.extendvalue}"/>
			<s:hidden 
				id="assetId_%{#status.index}" name="extendList[%{#status.index}].assetId" 
				value="%{#extend.assetId}" />
			<s:hidden 
				id="extendtypevalue_%{#status.index}" name="extendList[%{#status.index}].extendtypevalue" 
				value="%{#extend.extendtypevalue}" />
			<s:hidden 
				id="extendId_%{#status.index}" name="extendList[%{#status.index}].extendId" 
				value="%{#extend.extendId}" />
		</td>
	</tr>
</s:iterator>

原因:Action里没有extendList,extendList是entity里的属性,struts在自动装载时找不到extendList,所以才报null错。那么在表单相应的地方添加entity.就可以来。
修改后

<s:iterator value="entity.extendList" id="extend" status="status">
	<tr>
		<td class="asset_frm_label">${extend.extendcname}</td>
		<td>
			<s:textfield id="%{#extend.extendtypevalue}"
				name="entity.extendList[%{#status.index}].extendvalue" size="15" 
				cssClass="k-textbox" value="%{#extend.extendvalue}"/>
			<s:hidden 
				id="assetId_%{#status.index}" name="entity.extendList[%{#status.index}].assetId" 
				value="%{#extend.assetId}" />
			<s:hidden 
				id="extendtypevalue_%{#status.index}" name="entity.extendList[%{#status.index}].extendtypevalue" 
				value="%{#extend.extendtypevalue}" />
			<s:hidden 
				id="extendId_%{#status.index}" name="entity.extendList[%{#status.index}].extendId" 
				value="%{#extend.extendId}" />
		</td>
	</tr>
</s:iterator>

疑问:未修改前,为何读取表单界面时可以读取到extendList和提交表单Action的entity.extendList.extendvalue有修改后的值?
猜测:有可能,struts先在Action查找extendList属性,找不到时再去getModel返回的对象entity查找,找到了再进行装载。但为何在entity里找到了还有包null呢?有待解答。

你可能感兴趣的:(jsp,struts)