我的struts应用程序有问题。我想在一些sql查询的基础上生成多个xml文件。函数正在生成每种货币的文件,正如您在代码中看到的那样,即如果我有3种货币,我应该生成3个文件。函数GenerateXSLAction正在生成xml所以在system.out我有3次“文件已保存”,但最后弹出屏幕只保存最后一个。我想下载3个文件。我是初学者是支柱。谁能帮我 ?我应该在哪里创建一个循环?
@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();
}
}