Xml JavaStruts生成多个文件

Xml JavaStruts生成多个文件,xml,file,dom,struts2,Xml,File,Dom,Struts2,我的struts应用程序有问题。我想在一些sql查询的基础上生成多个xml文件。函数按货币生成文件,正如您在代码中看到的,即如果我有3种货币,我应该生成3个文件。函数GenerateXSLAction正确地生成了xml,因此在system.out中我有3次“文件已保存”,但在最后的弹出屏幕上只保存了最后一次。我想下载3个文件。我是struts的初学者。有人能帮我吗?我应该在哪里创建循环 @Namespace("/fla/taxqube") @Results ({ @

我的struts应用程序有问题。我想在一些sql查询的基础上生成多个xml文件。函数按货币生成文件,正如您在代码中看到的,即如果我有3种货币,我应该生成3个文件。函数GenerateXSLAction正确地生成了xml,因此在system.out中我有3次“文件已保存”,但在最后的弹出屏幕上只保存了最后一次。我想下载3个文件。我是struts的初学者。有人能帮我吗?我应该在哪里创建循环

   @Namespace("/fla/taxqube")
    @Results ({
        @Result(type=StreamResult.class, value="resultFile", params={"inputName", "resultFile", "contentType", "application/ms-excel", "contentDisposition",     "attachment; filename=${fileName}"}),
        @Result (name=Action.INPUT, value="/fla/taxqube/show.jsp")

    })


public class GenerateXLSAction extends LoggedUserAwareAction{
    private static final long serialVersionUID = -4830370304838362908L;

    private String fileName;
    private String from;
    private String to;
    private ArrayList<Waluta> listaWalut;
    private ArrayList<WyciagiBankowe2> lista;

    public String getFrom() {
        return from;
    }


    public void setFrom(String from) {
        this.from = from;
    }


    public String getTo() {
        return to;
    }


    public void setTo(String to) {
        this.to = to;
    }


    @Override
    public String execute(){


        return SUCCESS;
    }


    public InputStream getResultFile() throws IOException{
        ArrayList<WyciagiBankowe> list = (ArrayList<WyciagiBankowe>)session.get(Constants.TAXQUBE_LIST);
        session.get("from");
        session.get("to");


        fileName = "JPK_WB(1).xml";
        generateXLSReport(list);


        return new FileInputStream(fileName);

    }

    public void generateXLSReport(ArrayList<WyciagiBankowe> list){
            try {

                FileOutputStream fileOut = new FileOutputStream(fileName);


                from = session.get("from").toString();
                to = session.get("to").toString();

                // current date // Data Wystawienia JPK

                DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
                Date date = new Date();

                // date from and date to - selection


                // tutaj musi byc zapytanie do asa o wb2

                listaWalut = new ArrayList<Waluta>();

                Waluta currency = null;
                Connection con = null;
                PreparedStatement st = null;
                ResultSet rs = null;


                    con = getConnectionToISeries((String)session.get(Constants.ISERIES_IP));

                    st = con.prepareStatement("SELECT " +
                    "Z1OJPK_WB2.CURRENCY, " +
                    "Z1OJPK_WB2.FROM, " +
                    "Z1OJPK_WB2.TO, " +
                    "Z1OJPK_WB2.W1OBAL, " +
                    "Z1OJPK_WB2.W1BKAC " +

                    "FROM Fpl600cf30/Z1OJPK_WB2");

                    st.executeQuery();
                    rs = st.getResultSet();

                    while(rs.next()){
                        currency = new Waluta();

                        currency.setCURRENCY(rs.getString(1));
                        currency.setFROM(rs.getString(2));
                        currency.setTO(rs.getString(3));
                        currency.setSaldoPoczatkowe(rs.getString(4));
                        currency.setKontoBankowe(rs.getString(5));

                        listaWalut.add(currency);
                    }

                    rs.close();
                    rs = null;
                    st.close();
                    st = null;


                // koniec zapytania


                    for (Waluta currency1: listaWalut) {

                // drugie zapytanie

                    lista = new ArrayList<WyciagiBankowe2>();
                    WyciagiBankowe2 rfcq;
                    con = getConnectionToISeries((String)session.get(Constants.ISERIES_IP));

                    st = con.prepareStatement("SELECT " +
                            "Z1OJPK_WB1.CURRENCY, " +
                            "Z1OJPK_WB1.W1ROWN, " +
                            "Z1OJPK_WB1.W1ODAT, " +
                            "Z1OJPK_WB1.W1PNAM, " +
                            "Z1OJPK_WB1.W1ODES, " +
                            "Z1OJPK_WB1.W1OAMO, " +
                            "Z1OJPK_WB1.W1OSAL " +

                            "FROM Fpl600cf30/Z1OJPK_WB1 "
                            + " WHERE CURRENCY = ?");

                    st.setString(1, currency.getCURRENCY());
                    st.executeQuery();
                    rs = st.getResultSet();

                    while(rs.next()){
                        rfcq = new WyciagiBankowe2();
//                      rfcq.setDate(DATE_ONLY_FORMAT.format(df.parse(rs.getObject(1).toString())));
//                      String time = rs.getObject(2).toString();
//                      if(time.length() < 6){
//                          time = "0" + time;
//                      }
                        rfcq.setCURRENCY(rs.getString(1));
                        rfcq.setNumerWiersza(rs.getString(2));
                        rfcq.setDataOperacji(rs.getString(3));
                        rfcq.setNazwaPodmiotu(rs.getString(4));
                        rfcq.setOpisOperacji(rs.getString(5));
                        rfcq.setKwotaOperacji(rs.getString(6));
                        rfcq.setSaldoOperacji(rs.getString(7));


                        lista.add(rfcq);
                    }

                    rs.close();
                    rs = null;
                    st.close();
                    st = null;


                // koniec drugiego zapytania


//              FileOutputStream fileOut = new FileOutputStream(fileName);

                        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
                        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

                        // root elements
                        Document doc = docBuilder.newDocument();
                        Element rootElement = doc.createElement("JPK");
                        doc.appendChild(rootElement);

                        // staff elements
                        Element Naglowek = doc.createElement("Naglowek");
                        rootElement.appendChild(Naglowek);


                        Element Podmiot1 = doc.createElement("Podmiot1");
                        rootElement.appendChild(Podmiot1);


                        Element NumerRachunku = doc.createElement("NumerRachunku");
                        NumerRachunku.appendChild(doc.createTextNode(currency1.getKontoBankowe().trim()));
                        rootElement.appendChild(NumerRachunku);



                            Element IdentyfikatorPodmiotu = doc.createElement("IdentyfikatorPodmiotu");
                            Podmiot1.appendChild(IdentyfikatorPodmiotu);

                            Element AdresPodmiotu = doc.createElement("AdresPodmiotu");
                            Podmiot1.appendChild(AdresPodmiotu);

                        // tu powinnien byc jeszcze lisc Numer rachunku

                        Element Salda = doc.createElement("Salda");
                        rootElement.appendChild(Salda);


                        // shorten way
                        // staff.setAttribute("id", "1");

                        // firstname elements
                        Element KodFormularza = doc.createElement("KodFormularza");
                        KodFormularza.appendChild(doc.createTextNode("JPK_WB"));
                        Naglowek.appendChild(KodFormularza);


                        Attr attr2 = doc.createAttribute("kodSystemowy");
                        attr2.setValue("JPK_WB(1)");
                        KodFormularza.setAttributeNode(attr2);      

                        Attr attr3 = doc.createAttribute("wersjaSchemy");
                        attr3.setValue("1-0");
                        KodFormularza.setAttributeNode(attr3);



                        // lastname elements
                        Element WariantFormularza = doc.createElement("WariantFormularza");
                        WariantFormularza.appendChild(doc.createTextNode("1"));
                        Naglowek.appendChild(WariantFormularza);

                        // nickname elements
                        Element CelZlozenia = doc.createElement("CelZlozenia");
                        CelZlozenia.appendChild(doc.createTextNode("1"));
                        Naglowek.appendChild(CelZlozenia);

                        // salary elements
                        Element DataWytworzeniaJPK = doc.createElement("DataWytworzeniaJPK");
                        DataWytworzeniaJPK.appendChild(doc.createTextNode(dateFormat.format(date)));
                        Naglowek.appendChild(DataWytworzeniaJPK);


                        Element DataOd = doc.createElement("DataOd");
                        DataOd.appendChild(doc.createTextNode(from.substring(0, 4) + "-" + from.substring(4, 6)  + "-" +  from.substring(6, 8)));
                        Naglowek.appendChild(DataOd);

                        // lastname elements
                        Element DataDo = doc.createElement("DataDo");
                        DataDo.appendChild(doc.createTextNode(to.substring(0, 4) + "-" + to.substring(4, 6)  + "-" +  to.substring(6, 8)));
                        Naglowek.appendChild(DataDo);

                        // nickname elements
                        Element DomyslnyKodWaluty = doc.createElement("DomyslnyKodWaluty");
                        DomyslnyKodWaluty.appendChild(doc.createTextNode(currency1.getCURRENCY().trim()));
                        Naglowek.appendChild(DomyslnyKodWaluty);

                        // salary elements
                        Element KodUrzedu = doc.createElement("KodUrzedu");
                        KodUrzedu.appendChild(doc.createTextNode("1234"));
                        Naglowek.appendChild(KodUrzedu);

                        // tutaj liscie noda identyfikator podmiotu

                        // salary elements
                        Element NIP = doc.createElement("NIP");
                        NIP.appendChild(doc.createTextNode("8992393856"));
                        IdentyfikatorPodmiotu.appendChild(NIP);


                        Element PelnaNazwa = doc.createElement("PelnaNazwa");
                        PelnaNazwa.appendChild(doc.createTextNode("International Deco Logistics Sp. z o.o."));
                        IdentyfikatorPodmiotu.appendChild(PelnaNazwa);

                        // lastname elements
                        Element REGON = doc.createElement("REGON");
                        REGON.appendChild(doc.createTextNode("932290611"));
                        IdentyfikatorPodmiotu.appendChild(REGON);


                        // tutaj liscie noda adres podmiotu

                        // nickname elements
                        Element KodKraju = doc.createElement("KodKraju");
                        KodKraju.appendChild(doc.createTextNode("PL"));
                        AdresPodmiotu.appendChild(KodKraju);

                        // salary elements
                        Element Wojewodztwo = doc.createElement("Wojewodztwo");
                        Wojewodztwo.appendChild(doc.createTextNode("dolnoslaskie"));
                        AdresPodmiotu.appendChild(Wojewodztwo);

                        Element Powiat = doc.createElement("Powiat");
                        Powiat.appendChild(doc.createTextNode("strzelinski"));
                        AdresPodmiotu.appendChild(Powiat);


                        Element Gmina = doc.createElement("Gmina");
                        Gmina.appendChild(doc.createTextNode("Borow"));
                        AdresPodmiotu.appendChild(Gmina);

                        // lastname elements
                        Element Ulica = doc.createElement("Ulica");
                        Ulica.appendChild(doc.createTextNode("Nowowiejska"));
                        AdresPodmiotu.appendChild(Ulica);

                        // nickname elements
                        Element NrDomu = doc.createElement("NrDomu");
                        NrDomu.appendChild(doc.createTextNode("1"));
                        AdresPodmiotu.appendChild(NrDomu);

                        // salary elements
                        Element Miejscowosc = doc.createElement("Miejscowosc");
                        Miejscowosc.appendChild(doc.createTextNode("Borek Strzelinski"));
                        AdresPodmiotu.appendChild(Miejscowosc);

                        Element KodPocztowy = doc.createElement("KodPocztowy");
                        KodPocztowy.appendChild(doc.createTextNode("57-160"));
                        AdresPodmiotu.appendChild(KodPocztowy);


                        Element Poczta = doc.createElement("Poczta");
                        Poczta.appendChild(doc.createTextNode("Borow"));
                        AdresPodmiotu.appendChild(Poczta);

                        // lastname elements
                        Element SaldoPoczatkowe = doc.createElement("SaldoPoczatkowe");
                        SaldoPoczatkowe.appendChild(doc.createTextNode(currency1.getSaldoPoczatkowe().trim()));
                        Salda.appendChild(SaldoPoczatkowe);

                        // nickname elements
                        Element SaldoKoncowe = doc.createElement("SaldoKoncowe");
                        SaldoKoncowe.appendChild(doc.createTextNode("400.00"));
                        Salda.appendChild(SaldoKoncowe);

                        // end salda

                        // tutaj juz zaczynaja sie wiersze
                        // iteracja po kontrahentach wyciagi bankowe

            for (WyciagiBankowe2 rfcq2 : lista) {


                Element WyciagWiersz = doc.createElement("WyciagWiersz");
                rootElement.appendChild(WyciagWiersz);

                Attr attr = doc.createAttribute("typ");
                attr.setValue("G");
                WyciagWiersz.setAttributeNode(attr);

                        Element NumerWiersza = doc.createElement("NumerWiersza");
                        NumerWiersza.appendChild(doc.createTextNode("1"));
                        WyciagWiersz.appendChild(NumerWiersza);

                        Element DataOperacji = doc.createElement("DataOperacji");
                        DataOperacji.appendChild(doc.createTextNode(rfcq2.getDataOperacji().trim()));
                        WyciagWiersz.appendChild(DataOperacji);

                        Element NazwaPodmiotu = doc.createElement("NazwaPodmiotu");
                        NazwaPodmiotu.appendChild(doc.createTextNode(rfcq2.getNazwaPodmiotu().trim()));
                        WyciagWiersz.appendChild(NazwaPodmiotu);

                        Element OpisOperacji = doc.createElement("OpisOperacji");
                        OpisOperacji.appendChild(doc.createTextNode(rfcq2.getOpisOperacji().trim()));
                        WyciagWiersz.appendChild(OpisOperacji);

                        Element KwotaOperacji = doc.createElement("KwotaOperacji");
                        KwotaOperacji.appendChild(doc.createTextNode(rfcq2.getKwotaOperacji().trim()));
                        WyciagWiersz.appendChild(KwotaOperacji);

                        Element SaldoOperacji = doc.createElement("SaldoOperacji");
                        SaldoOperacji.appendChild(doc.createTextNode(rfcq2.getSaldoOperacji().trim()));
                        WyciagWiersz.appendChild(SaldoOperacji);

            }           

                        // end wierszy

                        Element WyciagCtrl =  doc.createElement("WyciagCtrl");
                        rootElement.appendChild(WyciagCtrl);


                        Element LiczbaWierszy = doc.createElement("LiczbaWierszy");
                        LiczbaWierszy.appendChild(doc.createTextNode("22"));
                        WyciagCtrl.appendChild(LiczbaWierszy);

                        Element SumaObciazen = doc.createElement("SumaObciazen");
                        SumaObciazen.appendChild(doc.createTextNode("300.00"));
                        WyciagCtrl.appendChild(SumaObciazen);

                        Element SumaUznan = doc.createElement("SumaUznan");
                        SumaUznan.appendChild(doc.createTextNode("500.00"));
                        WyciagCtrl.appendChild(SumaUznan);


                        // write the content into xml file
                        TransformerFactory transformerFactory = TransformerFactory.newInstance();
                        Transformer transformer =transformerFactory.newTransformer();

//                      StringWriter writer = new StringWriter();
//                      

//                      Source xmlSource = new DOMSource(doc);
                        DOMSource source = new DOMSource(doc);

                        // pelna biblioteka jest podana dlatego ze jest konfikt obiektow StreamResult 
                        javax.xml.transform.stream.StreamResult result = new javax.xml.transform.stream.StreamResult(fileOut);
                        transformer.transform(source, result);

                        System.out.println(dateFormat.format(date) + " File saved!");

        }


                      } catch (ParserConfigurationException pce) {
                        pce.printStackTrace();
                      } catch (TransformerException tfe) {
                        tfe.printStackTrace();
                      } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

            }
@名称空间(“/fla/taxqube”)
@结果({
@结果(type=StreamResult.class,value=“resultFile”,params={“inputName”,“resultFile”,“contentType”,“application/ms excel”,“contentDisposition”,“附件;filename=${filename}”),
@结果(name=Action.INPUT,value=“/fla/taxqube/show.jsp”)
})
公共类GenerateXLAction扩展了LoggedUserAwareAction{
私有静态最终长serialVersionUID=-4830370304838362908L;
私有字符串文件名;
来自的私有字符串;
私有字符串到;
私人ArrayList listaWalut;
私人ArrayList lista;
公共字符串getFrom(){
返乡;
}
public void setFrom(String from){
this.from=from;
}
公共字符串getTo(){
返回;
}
公共void设置为(字符串为){
这个;
}
@凌驾
公共字符串execute(){
回归成功;
}
公共InputStream getResultFile()引发IOException{
ArrayList=(ArrayList)session.get(Constants.TAXQUBE\u list);
会话。获取(“从”);
会话。获取(“to”);
fileName=“JPK_WB(1).xml”;
生成LSReport(列表);
返回新的FileInputStream(文件名);
}
公共无效生成LSReport(ArrayList列表){
试一试{
FileOutputStream fileOut=新的FileOutputStream(文件名);
from=session.get(“from”).toString();
to=session.get(“to”).toString();
//当前日期//数据Wystawienia JPK
DateFormat DateFormat=新的简化格式(“yyyy-MM-dd'HH:MM:ss”);
日期=新日期();
//日期从和日期到-选择
//图塔伊·穆西·比亚克·扎皮塔尼·多阿萨·奥巴托·沃基2
listaWalut=newarraylist();
瓦卢塔货币=空;
连接con=null;
PreparedStatement st=null;
结果集rs=null;
con=getConnectionIseries((String)session.get(Constants.ISERIES_IP));
st=con.prepareStatement(“选择”+
“Z1OJPK_WB2.CURRENCY,”+
“Z1OJPK_WB2.FROM,”+
“Z1OJPK_WB2.TO,”+
Z1OJPK_WB2.W1OBAL+
“Z1OJPK_WB2.W1BKAC”+
“来自Fpl600cf30/Z1OJPK_WB2”);
圣行政学院();
rs=st.getResultSet();
while(rs.next()){
货币=新瓦卢塔();
currency.setCURRENCY(rs.getString(1));
currency.setFROM(rs.getString(2));
currency.setTO(rs.getString(3));
货币.setSaldoPoczatkowe(rs.getString(4));
货币.setKontoBankowe(rs.getString(5));
listaWalut.add(货币);
}
rs.close();
rs=null;
圣克洛斯();
st=null;
//科尼克扎皮塔尼亚酒店
用于(瓦卢塔货币1:listaWalut){
//扎皮塔尼药店
lista=新的ArrayList();
WyciagiBankowe2 rfcq;
con=getConnectionIseries((String)session.get(Constants.ISERIES_IP));
st=con.prepareStatement(“选择”+
“Z1OJPK_WB1.CURRENCY,”+
“Z1OJPK_WB1.W1ROWN,”+
“Z1OJPK_WB1.W1ODAT,”+
“Z1OJPK_WB1.W1PNAM,”+
“Z1OJPK_WB1.W1ODES,”+
“Z1OJPK_WB1.W1OAMO,”+
“Z1OJPK_WB1.W1OSAL”+
“来自Fpl600cf30/Z1OJPK_WB1”
+“其中货币=?”;
st.setString(1,currency.getCURRENCY());
圣行政学院();
rs=st.getResultSet();
while(rs.next()){
rfcq=新的Wyciagibankow2();
//setDate(仅日期\格式.FORMAT(df.parse(rs.getObject(1.toString())));
//字符串时间=rs.getObject(2).toString();
//if(time.length()<6){
//time=“0”+时间;
//                      }
rfcq.setCURRENCY(rs.getString(1));
rfcq.setNumerWiersza(rs.getString(2));
rfcq.setDataOperacji(rs.getString(3));
rfcq.setNazwaPodmiotu(rs.getString(4));
rfcq.setOpisOperacji(rs.getString(5));
rfcq.setKwotaOperacji(rs.getString(6));
rfcq.setSaldoOperacji(rs.getString(7));
添加列表(rfcq);
}
rs.close();
rs=null;
圣克洛斯();
st=null;
//扎皮塔尼亚药厂
//FileOutputStream fileOut=新的FileOutputStream(文件名);
DocumentBuilderFactory docFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=docFactory.newDocumentBuilder();
//根元素
文档doc=docBuild