0

なぜこれで何も得られないのか知りたいです。SQL Server 2008からバイト配列を返す関数がありますが、何も取得されません。なぜですか?.getWhiteLabelingLogo()は、jspページに表示したい画像を含むbyte[]を返す関数です。私はこれにアクセスします

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.rmi.RemoteException;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.apache.axis.MessageContext;
import org.apache.struts2.ServletActionContext;
import org.datacontract.schemas._2004._07.CCIS_Web_Services_PublicApi.PapiAccountInfo;
import org.datacontract.schemas._2004._07.CCIS_Web_Services_PublicApi.PapiUserInfo;

import Services.Web.CCIS.BasicHttpBinding_PublicApiServiceStub;
import Services.Web.CCIS.PublicApiService_PortType;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class ShowImageAction extends ActionSupport{
  Map session;
 private byte[] itemImage; 
 private InputStream str = null;
public String execute() throws RemoteException { 
    System.out.println("Estoy aquí");
        HttpServletResponse response = ServletActionContext.getResponse(); 


   session = ActionContext.getContext().getSession();
   PublicApiService_PortType puerto=(PublicApiService_PortType) session.get("puerto");
   ((BasicHttpBinding_PublicApiServiceStub)puerto).setMaintainSession(true);

   MessageContext ctx=(MessageContext) session.get("contexto");
   PapiUserInfo[] users;

    users = puerto.getUsers();
    Long accountID=users[0].getID();
    PapiAccountInfo info=puerto.getAccountInfo(accountID);
            itemImage=info.getWhiteLabelingLogo();
            str=new ByteArrayInputStream(itemImage);
        return SUCCESS;




}

  public void setItemImage(byte[] itemImage) { 
      this.itemImage = itemImage; 
   }

   public InputStream getStr() {
    return str;
   }

   public void setStr(InputStream str) {
    this.str = str;
   }

   public byte[] getItemImage() {
    return itemImage;
   } 


  }

index.jspで私はこれを持っています:

<img src="<s:url value="ShowImageAction" />" border="0" width="100" height="100"> 

そしてstruts.xmlにはこれがあります:

 <action name="ShowImageAction">
  <result name="success" type="stream">
    <param name="inputName">str</param>
    <param name="contentType">image/jpeg</param>

 </result>
</action>

何もしていないので悪いことをしています。本当にありがとう

4

1 に答える 1

1

まず、アクション メソッドがまったくありません。という名前のメソッドがありますexecute、静的で void を返します。アクション メソッドは静的ではなく、Struts.xml の結果にマップされる文字列を返します。

さらに、応答にコンテンツ タイプを設定した後は、データを送信することはありません。

このアクションには、スレッドセーフではない変更可能な静的フィールドの使用など、他の問題もあります。

実行する手順は次のとおりです。

  • executeメソッドを非静的に変更し、文字列を返します
  • return SUCCESS;メソッドの最後に行を追加します
  • 結果 "success" を参照するように struts.xml マッピングを更新します (SUCCESS は、実際の値が "success" である定数です)。
  • 3 つのメンバー フィールドを非静的にする
  • コードではなく、struts.xml でコンテンツ タイプを設定します (以下の例を参照)。
  • response.reset() および .setContentType() 呼び出しを削除します

例:

<action name="ShowImageAction" class="package.for.ShowImageAction">
  <result name="success" type="stream">
    <param name="contentType">image/jpeg</param>
    <param name="inputName">str</param>
  </result>
</action>

それでもうまくいかない場合は、質問を適切に修正してください。

于 2012-08-15T17:20:37.160 に答える