Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

JSF2.2のファイルダウンロードについて

はじめまして、以下の内容のJSF2.2の実装がうまくいか
ず困っております。
JSFについてお詳しい方がおりましたらご教示のほどよ
ろしくお願いいたします。

[うまくいかない実装の内容]
移動した値を取得してファイルが出力できない。
(リストA(Listboxleft)からリストB(Listboxrigh)に
値を移動させ、リストBの内容を送る「ダウンロード」
ボタンを押下してもファイルが出力されない。
リストBの(itemlist2)の値を確認したところNULLでした
ので移動した値の取得がうまくおこなえていない可能性
があると思います。)
以下ソースです。
--------------------------------------------
【filedownload.jsp】
<script src="./js/jquery-1.11.2.min.js"></script>
<script>
$(document).ready(function() {
    $('input[name="allright"]').click(function
() {
        
$('#Listboxright\\:rightitem').append($('#Listboxl
eft\\:leftitem option'));
    });
    $('input[name="right"]').click(function() 
{
        
$('#Listboxright\\:rightitem').append($('#Listboxl
eft\\:leftitem option:selected'));
    });
    $("input[name=left]").click(function() {
        
$('#Listboxleft\\:leftitem').append($('#Listboxrig
ht\\:rightitem option:selected'));    
    });
    $('input[name="allleft"]').click(function(
) {
        
$('#Listboxleft\\:leftitem').append($('#Listboxrig
ht\\:rightitem option'));
    });
});
</script>
<body>
<f:view>
<h1>ファイルダウンロード</h1>
    <h:form id="Listboxleft" 
enctype="multipart/form-data">
        <h:selectManyListbox id="leftitem" 
size="15" value="#{FileEdit.itemlist1}">
            <f:selectItems value="#
{FileEdit.items}"/>
        </h:selectManyListbox>
        <h:commandButton value="ダウンロード" 
id="button1" action="#
{FileEdit.download('downloadfile_leftlist.csv')}"/
>
    </h:form>
    <input type="button" name="allright" 
value="≫" /><br /><br />
    <input type="button" name="right" value=">" 
/><br /><br />
    <input type="button" name="left" value="<" />
<br /><br />
    <input type="button" name="allleft" value="≪" 
/>
    <h:form id="Listboxright" 
enctype="multipart/form-data">
        <h:selectManyListbox id="rightitem" 
size="15" value="#{FileEdit.itemlist2}">
            <f:selectItems value="#
{FileEdit.items2}"/>
        </h:selectManyListbox>
        <h:commandButton value="ダウンロード" 
id="button2" action="#
{FileEdit.download('downloadfile_rightlist.csv')}"
>
        <f:param name="action" value="delete"/>
        </h:commandButton>
    </h:form>
</f:view>
</body>
--------------------------------------------
【filedownload.jsp】
public class FileEdit {
  //Listboxleftの表示
    private List<SelectItem> items;
    public List<SelectItem> getItems() {
        ArrayList<SelectItem> items = new 
ArrayList<SelectItem> ();
        items.add(new SelectItem("小説", "小説"));
        items.add(new SelectItem("技術本", "技術
本"));
        items.add(new SelectItem("雑誌", "雑誌"));
        return items;
    }
    public void setItems(List<SelectItem> 
Items) {
        this.items = Items;
    }
  //Listboxrightの表示
    private List<SelectItem> items2;
    
    public List<SelectItem> getItems2() {
        ArrayList<SelectItem> items2 = new 
ArrayList<SelectItem> ();
        return items2;
    }
    public void setItems2(List<SelectItem> 
Items2) {
        this.items2 = Items2;
  }
  //Listboxrightの値の取得
  List<String> itemlist1;
  public List<String> getItemlist1(){
        ArrayList<String> itemlist1 = new 
ArrayList<String> ();
        return itemlist1;
  }
  public void setItemlist1(List<String> 
itemlist1){
        this.itemlist1 = itemlist1;
  }
  //Listboxrightの値の取得    
  List<String> itemlist2;
  public List<String> getItemlist2(){
        ArrayList<String> itemlist2 = new 
ArrayList<String> ();
        return itemlist2;
  }
  public void setItemlist2(List<String> 
itemlist2){
        this.itemlist2 = itemlist2;
  }
  //ファイルダウンロードの処理
    public void download(String fileName) 
throws IOException {
            //<出力ファイル指定>
            String douwnloadpatn = 
"C:\\test\\" + fileName;
            File newfile = new 
File(douwnloadpatn);
            if(newfile.exists()){
                newfile.delete();
                
System.out.println("ファイルを削除します。");
            }else{
                
System.out.println("ファイルがありません。");
            }
            
            //<出力ファイルにリストデータ
書き込み>
            FileOutputStream 
douwnloadfile = new 
FileOutputStream(douwnloadpatn);
            OutputStreamWriter out = 
new OutputStreamWriter(douwnloadfile, 
"Shift_JIS");
            
            //書き込むリストデータの判

            
System.out.println(fileName);
            String fileNameJubg = 
"downloadfile_leftlist.csv";
            
if(fileNameJubg.equals(fileName)){
                //Listboxrightの場合
                for(int i = 0; i < 
itemlist1.size(); ++i){
                    
out.write(itemlist1.get(i));
                    
out.write("\r\n");
                }
            }else{
                 //Listboxleft右側の場合
                for(int i = 0; i < 
itemlist2.size(); ++i){
                    
out.write(itemlist2.get(i));
                    out.write("\r\n");
                }
            }
            out.close();
            //<サーブレットの情報の取得>
            //エラーを検出した場合のエラーメッ
セージ取得
            FacesContext fc = 
FacesContext.getCurrentInstance();
            //サーブレットコンテキストに対する
ラッパー
            ExternalContext ec = 
fc.getExternalContext();
            ec.responseReset();
            //受け取ったデータの処理(windows
実行ファイル)
            
ec.setResponseContentType("application/octet-
stream");
            //サーバにあるファイルをダウンロー
ドさせるメソッド
            ec.setResponseHeader("Content-
Disposition", "attachment; filename=\"" + fileName 
+ "\"");
            System.out.println(ec);
            //HTTPヘッダー情報の取得
            ec.setResponseContentLength((int) 
newfile.length());
            System.out.println(ec);
            //
            output(newfile, 
ec.getResponseOutputStream());
            //HTTPのレスポンス終了
            fc.responseComplete();
    }
    
    private void output(File newfile, OutputStream 
os) throws IOException {
        // バイバリ型の作成
        byte buffer[] = new byte[4096];
        // データを圧縮して書き込む
        System.out.println(buffer);
        try (FileInputStream fis = new 
FileInputStream(newfile)) {
            int size;
            while ((size = fis.read(buffer)) != 
-1) {
                os.write(buffer, 0, size);
            }
        }
--------------------------------------------

1

回答

8545

閲覧

1件の回答

評価

0

左から右へ移動したという情報を、サーバに送ってないよう
なんだが。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。