提交表单之后出现java.lang.IllegalArgumentException

提交表单之后出现java.lang.IllegalArgumentException

# 具体遇到的问题
提交表单之后显示这个异常,java.lang.IllegalArgumentException: Adding text to an XML document must not be null,并且列表中原来每幅画的信息重复显示了一次

# 报错信息的截图

http://img1.sycdn.imooc.com//climg/5fa1146c092d1f9c10590354.jpg

http://img1.sycdn.imooc.com//climg/5fa1146d09aba6d008730236.jpg


# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

package mgallary.utils;

import mgallary.entity.Painting;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import sun.plugin.dom.css.CSSCharsetRule;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;

/**
*据源,用于XML文件解析Java
*/
public class XmlDataSource{
//static静态关键字保证数据全局唯一
   private static List<Painting> data = new ArrayList();
   private static String dataFile;
   static {
//得到pianting,xml文件完整物理路
       //如果路中含有空格,动将空格转换为20%,但javaIO会将地址中的20%识别为空格
       dataFile=XmlDataSource.class.getResource("/painting.xml").getPath();
//        System.out.println(dataFile);
       reload();
   }
private static void reload(){
URLDecoder decoder=new URLDecoder();
       try {
dataFile=decoder.decode(dataFile,"UTF-8");
           System.out.println(dataFile);
           //利用Dom4jXML行解析
           SAXReader reader=new SAXReader();
           //1.Document档对
           Document document=reader.read(dataFile);
           //2.利用Xpath得到XML点集合
           List<Node> nodes=document.selectNodes("/root/painting");
           for (Node node:nodes){
Element element=(Element)node;
               String id=element.attributeValue("id");
               String pname=element.elementText("pname");
               Painting painting=new Painting();
               painting.setId(Integer.parseInt(id));
               painting.setPname(pname);
               painting.setCategory(Integer.parseInt(element.elementText("category")));
               painting.setPrice(Integer.parseInt(element.elementText("price")));
               painting.setPreview(element.elementText("preview"));
               painting.setDescription(element.elementText("description"));
               data.add(painting);
//                System.out.println(id+":"+pname);
           }
} catch (Exception e) {
e.printStackTrace();
       }
}
/**
    * 取所有油Painting
    * @return Painting List
    */
   public static List<Painting> getRawData(){
return data;
   }
public static void append(Painting painting){
//1.XML,得到Document
       SAXReader reader=new SAXReader();
       Writer writer=null;
       try {
Document document=reader.read(dataFile);
           //2.建新的painting
           Element root=document.getRootElement();
           Element p=root.addElement("painting");
           //3.painting点的各
           p.addAttribute("id", String.valueOf(data.size()+1));
           p.addElement("pname").setText(painting.getPname());
           p.addElement("category").setText(painting.getCategory().toString());
           p.addElement("price").setText(painting.getPrice().toString());
           p.addElement("preview").setText(painting.getPreview());
           p.addElement("description").setText(painting.getDescription());
           //4.XML完追加操作
           writer =new OutputStreamWriter(new FileOutputStream(dataFile),"UTF-8");
           document.write(writer);
           System.out.println(dataFile);
       } catch (Exception e) {
e.printStackTrace();
       }finally {
if (writer !=null){
try {
writer.close();
               } catch (IOException e) {
e.printStackTrace();
               }
}
reload();//文件据一致
       }
}
public static void main(String[] args) {
/*List<Painting> ps=XmlDataSource.getRawData();
       for(Painting p:ps){
           System.out.println(p.getPname());
           System.out.println(p.getDescribe());*/
       Painting p=new Painting();
       p.setPname("测试");
       p.setCategory(1);
       p.setPrice(2000);
       p.setPreview("F:\\JAVA\\Idea workspace\\javaweb\\mgallary\\out\\artifacts\\mgallary_war_exploded\\upload\\770bc7bb-e093-4774-8b8b-26bd31bafc4a.jpg");
       p.setDescription("ceshiyou");
       append(p);
   }
}

================================

package mgallary.dao;

import mgallary.entity.Painting;
import mgallary.utils.PageModel;
import mgallary.utils.XmlDataSource;

import java.util.ArrayList;
import java.util.List;

public class PaintingDao {
/**
    * 页查询画数
    * @param page 页号
    * @param rows 页记录数
    * @return PageModel页对
    */
   public PageModel pagination(int page,int rows){
//Painting画对象集合
       List<Painting> list=XmlDataSource.getRawData();
       //PageModel页处理得到分页数据及分附加
       PageModel pageModel =new PageModel(list,page,rows);
       return pageModel;
   }

public PageModel pagination(int category,int page,int rows){
List<Painting> list=XmlDataSource.getRawData();
       List<Painting> categoryList=new ArrayList<>();
       for (Painting p:list){
if (p.getCategory()==category){
categoryList.add(p);
           }
}
PageModel pageModel =new PageModel(categoryList,page,rows);
       return pageModel;
   }

/**
    * 据新增
    * @param painting 信息
    */
   public void create(Painting painting){
XmlDataSource.append(painting);
   }
public static void main(String[] args) {
XmlDataSource xmlDataSource=new XmlDataSource();
       List<Painting> rawData = xmlDataSource.getRawData();
       System.out.println(rawData.size());
   }
}


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,测试同学贴出的代码是可以正常添加的,根据报错信息显示,向XML文档添加文本不能为空,同学根据报错提示的位置,查看下报错是哪句代码,结合代码以及报错信息定位错误

如果还有问题建议同学将全部代码反馈到问答区,并说明报错代码

祝学习愉快


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师