2

文字列を含む JSP フォームを送信しており、送信時に Struts 2 アクションを呼び出しています。そのアクションでは、以下のように QRGen ライブラリを使用して QRCode イメージを作成しています

File QRImg=QRCode.from("submitted String").to(ImageType.PNG).withSize(100, 100).file();

私のJSPフォーム:

<form action="createQR">
Enter Your Name<input type="text" name="userName"/><br/>
<input type="submit" value="Create QRCode"/>
</form>

私のアクションマッピングstruts.xml

<action name="createQR" class="CreateQRAction">
 <result name="success">displayQR.jsp</result>
</action>

私のアクションクラス:

import java.io.File;
import net.glxn.qrgen.QRCode;
import net.glxn.qrgen.image.ImageType;  
import com.opensymphony.xwork2.ActionSupport;
public class CreateQRAction extends ActionSupport{
 private File QRImg;
 Private String userName;

 public String execute() {
   QRImg=QRCode.from(userName).to(ImageType.PNG).withSize(100, 100).file();
return SUCCESS;
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}
public File getQRImg() {
    return QRImg;
}

public void setQRImg(File QRImg) {
    this.QRImg = QRImg;
}
}

結果が成功した場合、この画像を JSP に表示したいと思います。

<s:property value="QRImg"/>
4

2 に答える 2

3

フォルダー内のような静的画像を使用するのと同様の画像を取得するには、タグを属性として<s:url置き換えることができるアクションが必要なようです。<imghref/images

と呼びましょうImageAction。これは、応答を出力する単純なアクションです。それを使用するには、画像を含むファイルをセッションに入れる必要があります。画像は別々のスレッドによって取得されるためです。実行メソッドの書き込みで

@Action(value = "image",  interceptorRefs = @InterceptorRef("basicStack"))
public class ImageAction extends ActionSupport {

public String execute() {

セッションからファイルを取得する

File file = session.get("file");

次に、ファイルを読み取る必要があります

FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[fis.available()];
fis.read(data);
fis.close();

次に、応答に書き込みます

response.setContentType("image/png");

BufferedImage bi;
OutputStream os = response.getOutputStream();
bi = ImageIO.read(new ByteArrayInputStream(data));
ImageIO.write(bi, "PNG", os);
os.flush();

このアクションは応答への書き込みのみを行うため、NONE の結果を返します。

return NONE;
}

終わり

次に、アクションから転送された JSP で を使用します<img src="<s:url action="image"/>" style="width:100%;"/>。パスを追加する必要がある場合は、アクションで名前空間アノテーションを使用し、url で属性を使用します。

Struts2 のセッションの概念、つまりアクションにセッションを挿入し、オブジェクトをマップする方法についてはよく知っていると思います。結果を返す前に、アクションでファイル オブジェクトをマップします。

幸運を。

于 2013-03-07T17:59:08.323 に答える
1

struts2 で「org.apache.struts2.dispatcher.StreamResult」を使用する必要があります。基本的に、アクションで画像を読み取り、InputStream に入力します。「ストリーム」結果を正しく構成するために必要な他の変数もセットアップします。アクション マッピングでこれらを使用して、「ストリーム」タイプの結果をプロパティ設定します。

于 2013-03-08T07:49:31.613 に答える