java.lang.NullPointerException
at com.action.informng.GoodsInforAction.addGoodsInfor(GoodsInforAction.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
以下是GoodsCate .java
package com.bean.informng;
import java.util.HashSet;
import java.util.Set;
public class GoodsCate {
private int goods_num;
private String goods_cateName;
private Set<GoodsInfor> goodsInfor = new HashSet<GoodsInfor>();
public int getGoods_num() {
return goods_num;
}
public void setGoods_num(int goods_num) {
this.goods_num = goods_num;
}
public String getGoods_cateName() {
return goods_cateName;
}
public void setGoods_cateName(String goods_cateName) {
this.goods_cateName = goods_cateName;
}
public Set<GoodsInfor> getGoodsInfor() {
return goodsInfor;
}
public void setGoodsInfor(Set<GoodsInfor> goodsInfor) {
this.goodsInfor = goodsInfor;
}
}
商品信息GoodsInfor.java
package com.bean.informng;
public class GoodsInfor {
private int goods_code;
private String goods_name;
private int goods_category;
private String goods_mnemonic;
private String goods_model;
private String goods_unit;
private String goods_address;
private int goods_price;
private int goods_presale;
private String goods_remark;
private GoodsCate goodsCate;
public int getGoods_code() {
return goods_code;
}
public void setGoods_code(int goods_code) {
this.goods_code = goods_code;
}
public String getGoods_name() {
return goods_name;
}
public void setGoods_name(String goods_name) {
this.goods_name = goods_name;
}
public int getGoods_category() {
return goods_category;
}
public void setGoods_category(int goods_category) {
this.goods_category = goods_category;
}
public String getGoods_mnemonic() {
return goods_mnemonic;
}
public void setGoods_mnemonic(String goods_mnemonic) {
this.goods_mnemonic = goods_mnemonic;
}
public String getGoods_model() {
return goods_model;
}
public void setGoods_model(String goods_model) {
this.goods_model = goods_model;
}
public String getGoods_unit() {
return goods_unit;
}
public void setGoods_unit(String goods_unit) {
this.goods_unit = goods_unit;
}
public String getGoods_address() {
return goods_address;
}
public void setGoods_address(String goods_address) {
this.goods_address = goods_address;
}
public int getGoods_price() {
return goods_price;
}
public void setGoods_price(int goods_price) {
this.goods_price = goods_price;
}
public int getGoods_presale() {
return goods_presale;
}
public void setGoods_presale(int goods_presale) {
this.goods_presale = goods_presale;
}
public String getGoods_remark() {
return goods_remark;
}
public void setGoods_remark(String goods_remark) {
this.goods_remark = goods_remark;
}
public GoodsCate getGoodsCate() {
return goodsCate;
}
public void setGoodsCate(GoodsCate goodsCate) {
this.goodsCate = goodsCate;
}
}
映像文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.bean.informng.GoodsInfor" table="goods_information">
<id name="goods_code" type="java.lang.Integer">
<column name="goods_code" />
</id>
<many-to-one name="goodsCate" class="com.bean.informng.GoodsCate" lazy="false" fetch="join">
<column name="goods_category" />
</many-to-one>
<property name="goods_name" type="java.lang.String">
<column name="goods_name" />
</property>
<property name="goods_mnemonic" type="java.lang.String">
<column name="goods_mnemonic" />
</property>
<property name="goods_model" type="java.lang.String">
<column name="goods_model" />
</property>
<property name="goods_unit" type="java.lang.String">
<column name="goods_unit" />
</property>
<property name="goods_address" type="java.lang.String">
<column name="goods_address" />
</property>
<property name="goods_price" type="java.lang.Integer">
<column name="goods_price" />
</property>
<property name="goods_presale" type="java.lang.Integer">
<column name="goods_presale" />
</property>
<property name="goods_remark" type="java.lang.String">
<column name="goods_remark" />
</property>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.bean.informng.GoodsCate" table="goods_cate">
<id name="goods_num" type="java.lang.Integer">
<column name="goods_num" />
</id>
<property name="goods_cateName" type="java.lang.String">
<column name="goods_cateName" />
</property>
<set name="goodsInfor" lazy="false" fetch="join">
<key>
<column name="goods_category" />
</key>
<one-to-many class="com.bean.informng.GoodsInfor" />
</set>
</class>
</hibernate-mapping>
Action:
package com.action.informng;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.bean.informng.GoodsCate;
import com.bean.informng.GoodsInfor;
import com.opensymphony.xwork2.ActionSupport;
import com.service.informng.GoodsCateManageService;
import com.service.informng.GoodsInforManageService;
public class GoodsInforAction extends ActionSupport{
private int goods_code;
private int goods_category;
private String goods_name;
private String goods_mnemonic;
private String goods_model;
private String goods_unit;
private String goods_address;
private int goods_price;
private int goods_presale;
private String goods_remark;
private GoodsInfor goodsInfor;
private GoodsInforManageService goodsInforService;
private List<GoodsInfor> goodsInforList;
private String json;
private String delids;
private GoodsCate goodsCate;
private GoodsCateManageService cateService;
private int goods_num;
public String execute() throws Exception {
goodsInforList = goodsInforService.findAllGoodsInfor();
json="{Rows:[";
for (int i = 0; i < goodsInforList.size(); i++) {
GoodsInfor su = goodsInforList.get(i);
json+="{goods_code:\""+su.getGoods_code()+"\",goodsCate:\""+su.getGoodsCate().getGoods_cateName()+"\",goods_name:\""+su.getGoods_name()+"\"," +
"goods_mnemonic:\""+su.getGoods_mnemonic()+"\"," +
"goods_model:\""+su.getGoods_model()+"\"," +
"goods_unit:\""+su.getGoods_unit()+"\"," +
"goods_address:\""+su.getGoods_address()+"\"," +
"goods_price:\""+su.getGoods_price()+"\"," +
"goods_presale:\""+su.getGoods_presale()+"\"," +
"goods_remark:\""+su.getGoods_remark()+"\" },";
}
json+="]}";
System.out.println(json);
return SUCCESS;
}
public String addGoodsInfor() throws Exception {
GoodsInfor goodsInfor=new GoodsInfor();
goodsInfor.setGoods_code(goods_code);
GoodsCate cate=cateService.findoneGoodsCate(goods_num);
goodsInfor.setGoodsCate(cate);
goodsInfor.setGoods_name(goods_name);
goodsInfor.setGoods_mnemonic(goods_mnemonic);
goodsInfor.setGoods_model(goods_model);
goodsInfor.setGoods_unit(goods_unit);
goodsInfor.setGoods_address(goods_address);
goodsInfor.setGoods_price(goods_price);
goodsInfor.setGoods_presale(goods_presale);
goodsInfor.setGoods_remark(goods_remark);
goodsInforService.addGoodsInfor(goodsInfor);
return SUCCESS;
}
public void delGoodsInfor() throws Exception {
List<Integer> idlist=new ArrayList<Integer>();
String[] ids = delids.split(",");
for (int i = 0; i < ids.length; i++) {
idlist.add(Integer.parseInt(ids[i]));
}
goodsInforService.delGoodsInfor(idlist);
goodsInforList = goodsInforService.findAllGoodsInfor();
json="{Rows:[";
for (int i = 0; i < goodsInforList.size(); i++) {
GoodsInfor su = goodsInforList.get(i);
json+="{goods_code:\""+su.getGoods_code()+"\",goodsCate:\""+su.getGoodsCate().getGoods_cateName()+"\",goods_name:\""+su.getGoods_name()+"\"," +
"goods_mnemonic:\""+su.getGoods_mnemonic()+"\"," +
"goods_model:\""+su.getGoods_model()+"\"," +
"goods_unit:\""+su.getGoods_unit()+"\"," +
"goods_address:\""+su.getGoods_address()+"\"," +
"goods_price:\""+su.getGoods_price()+"\"," +
"goods_presale:\""+su.getGoods_presale()+"\"," +
"goods_remark:\""+su.getGoods_remark()+"\" },";
}
json+="]}";
System.out.println(json);
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.println(json);
}
public String findOneGoodsInfor() throws Exception{
System.out.println(goods_code);
goodsInfor=goodsInforService.findoneGoodsInfor(goods_code);
return SUCCESS;
}
public String updateGoodsInfor() throws Exception{
goodsInforService.updateGoodsInfor(goodsInfor);
return SUCCESS;
}
public int getGoods_code() {
return goods_code;
}
public void setGoods_code(int goods_code) {
this.goods_code = goods_code;
}
public int getGoods_category() {
return goods_category;
}
public void setGoods_category(int goods_category) {
this.goods_category = goods_category;
}
public String getGoods_name() {
return goods_name;
}
public void setGoods_name(String goods_name) {
this.goods_name = goods_name;
}
public String getGoods_mnemonic() {
return goods_mnemonic;
}
public void setGoods_mnemonic(String goods_mnemonic) {
this.goods_mnemonic = goods_mnemonic;
}
public String getGoods_model() {
return goods_model;
}
public void setGoods_model(String goods_model) {
this.goods_model = goods_model;
}
public String getGoods_unit() {
return goods_unit;
}
public void setGoods_unit(String goods_unit) {
this.goods_unit = goods_unit;
}
public String getGoods_address() {
return goods_address;
}
public void setGoods_address(String goods_address) {
this.goods_address = goods_address;
}
public int getGoods_price() {
return goods_price;
}
public void setGoods_price(int goods_price) {
this.goods_price = goods_price;
}
public int getGoods_presale() {
return goods_presale;
}
public void setGoods_presale(int goods_presale) {
this.goods_presale = goods_presale;
}
public String getGoods_remark() {
return goods_remark;
}
public void setGoods_remark(String goods_remark) {
this.goods_remark = goods_remark;
}
public GoodsInfor getGoodsInfor() {
return goodsInfor;
}
public void setGoodsInfor(GoodsInfor goodsInfor) {
this.goodsInfor = goodsInfor;
}
public GoodsInforManageService getGoodsInforService() {
return goodsInforService;
}
public void setGoodsInforService(GoodsInforManageService goodsInforService) {
this.goodsInforService = goodsInforService;
}
public List<GoodsInfor> getGoodsInforList() {
return goodsInforList;
}
public void setGoodsInforList(List<GoodsInfor> goodsInforList) {
this.goodsInforList = goodsInforList;
}
public String getJson() {
return json;
}
public void setJson(String json) {
this.json = json;
}
public String getDelids() {
return delids;
}
public void setDelids(String delids) {
this.delids = delids;
}
public GoodsCate getGoodsCate() {
return goodsCate;
}
public void setGoodsCate(GoodsCate goodsCate) {
this.goodsCate = goodsCate;
}
public GoodsCateManageService getCateService() {
return cateService;
}
public void setCateService(GoodsCateManageService cateService) {
this.cateService = cateService;
}
public int getGoods_num() {
return goods_num;
}
public void setGoods_num(int goods_num) {
this.goods_num = goods_num;
}
}
JSP添加页:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<base href="<%=basePath %>" />
<title>商品信息</title>
<link href="ui/ligerUI/skins/Aqua/css/ligerui-form.css" rel="stylesheet"
type="text/css" />
<script src="ui/jquery/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="ui/ligerUI/js/core/base.js" type="text/javascript"></script>
<script src="ui/ligerUI/js/plugins/ligerForm.js" type="text/javascript"></script>
<script src="ui/ligerUI/js/plugins/ligerDateEditor.js" type="text/javascript"></script>
<script src="ui/ligerUI/js/plugins/ligerComboBox.js" type="text/javascript"></script>
<script src="ui/ligerUI/js/plugins/ligerCheckBox.js" type="text/javascript"></script>
<script src="ui/ligerUI/js/plugins/ligerButton.js" type="text/javascript"></script>
<script src="ui/ligerUI/js/plugins/ligerDialog.js" type="text/javascript"></script>
<script src="ui/ligerUI/js/plugins/ligerRadio.js" type="text/javascript"></script>
<script src="ui/ligerUI/js/plugins/ligerSpinner.js" type="text/javascript"></script>
<script src="ui/ligerUI/js/plugins/ligerTextBox.js" type="text/javascript"></script>
<script type="text/javascript">
$(function ()
{
$("form").ligerForm();
});
</script>
<style type="text/css">
body{ font-size:12px;}
.l-table-edit {}
.l-table-edit-td{ padding:4px;}
.l-button-submit,.l-button-reset{width:80px; float:left; margin-left:10px; padding-bottom:2px;}
.l-verify-tip{ left:230px; top:120px;}
</style>
</head>
<body style="padding:10px">
<form method="post" action="AddGoodsInforAction">
<div>
</div>
<table cellpadding="0" cellspacing="0" class="l-table-edit" >
<tr>
<td align="right" class="l-table-edit-td">商品代码:</td>
<td align="left" class="l-table-edit-td"><input name="goodsInfor.goods_code" type="text" /></td>
<td align="left"></td>
<td align="right" class="l-table-edit-td">商品类别:</td>
<td align="left" class="l-table-edit-td">
<select name="goodsInfor.goods_category">
<s:iterator value="goodsCateList" id="good">
<option value="<s:property value="#good.goods_num"/>"><s:property value="#good.goods_cateName"/></option>
</s:iterator>
</select> </td>
</tr>
<tr>
<td align="right" class="l-table-edit-td">商品名称:</td>
<td align="left" class="l-table-edit-td"><input name="goodsInfor.goods_name" type="text" /></td>
<td align="left"></td>
<td align="right" class="l-table-edit-td">助记码:</td>
<td align="left" class="l-table-edit-td"><input name="goodsInfor.goods_mnemonic" type="text" /></td>
</tr>
<tr>
<td align="right" class="l-table-edit-td">商品型号:</td>
<td align="left" class="l-table-edit-td"><input name="goodsInfor.goods_model" type="text" /></td>
<td align="left"></td>
<td align="right" class="l-table-edit-td">单位名称:</td>
<td align="left" class="l-table-edit-td"><input name="goodsInfor.goods_unit" type="text" /></td>
</tr>
<tr>
<td align="right" class="l-table-edit-td">商品产地:</td>
<td align="left" class="l-table-edit-td"><input name="goodsInfor.goods_address" type="text" /></td>
<td align="left"></td>
<td align="right" class="l-table-edit-td">成本价:</td>
<td align="left" class="l-table-edit-td"><input name="goodsInfor.goods_price" type="text" /></td>
</tr>
<tr>
<td align="right" class="l-table-edit-td">预售价:</td>
<td align="left" class="l-table-edit-td"><input name="goodsInfor.goods_presale" type="text" /></td>
<td align="left"></td>
<td align="right" class="l-table-edit-td">备注:</td>
<td align="left" class="l-table-edit-td"><input name="goodsInfor.goods_remark" type="text" /></td>
</tr>
</table>
<br />
<input type="submit" value="提交" id="Button1" class="l-button l-button-submit" />
<input type="reset" value="重置" class="l-button l-button-reset"/>
</form>
<div style="display:none">
</div>
</body>
</html>
如果外键删了,添加功能是能实现的,个人觉得问题出在Action方法里:
GoodsCate cate=cateService.findoneGoodsCate(goods_num);
goodsInfor.setGoodsCate(cate);
就是商品信息里的商品类别值没传进去,求大神帮忙,在此谢谢了