題名の通り画像をアップロード後に次の画面で表示させたいのですが
なぜか毎回「Unable to find resource img, スクリーンショット (9).png」
と表示されてしまいます。
ですが、ページ(最初のページ)で再表示を押すとなぜかたまに表示されます。
できれば早めに解決策を教えていただきたいので
ご教授よろしくお願いします。
実行環境
NetBeans IDE 8.0.2
Chrome
コード(バッキングビーン 途中まで)
ここでファイルの保存先にNetBeansのresources内のimgに入れていますが、これは画像表示させる際にバッキングビーン内から簡単にアクセスするためです。
@ManagedBean
@RequestScoped
public class UploadPage {
private Part uploadedFile;
private String folder = "C:\\Users\\(名前)\\Documents\\NetBeansProjects\\ImagUp\\web\\resources\\img";
public Part getUploadedFile() {
return uploadedFile;
}
public void setUploadedFile(Part uploadedFile) {
this.uploadedFile = uploadedFile;
}
public String saveFile(){
try (InputStream input = uploadedFile.getInputStream()) {
String filename = uploadedFile.getSubmittedFileName();
Files.copy(input, new File(folder, filename ).toPath());
return "output";
}catch (IOException e) {
e.printStackTrace();
}
return null;
}
コード(index.xhtml)
下の行にある<h:graphicImage library="img" name="Screenshot_2.jpg"/>の目的は、output.xhtmlページへ行ったのちまたこちら(index.xhtml)へ戻ってくるようにしているのですが、その際にファイルが表示できるかどうか確かめるためです。
(まあ、できてしまうんですけどね)
<h:form enctype="multipart/form-data" prependId="false">
<h:outputText value="File: "></h:outputText>
<h:inputFile value="#{uploadPage.uploadedFile}" />
<h:commandButton value="Save" type="submit" action="#{uploadPage.saveFile}" style="color: red;"></h:commandButton>
<h:graphicImage library="img" name="スクリーンショット (9).png"/>
</h:form>
コード(output.xhtml)
<h:form>
<h:graphicImage library="img" name="#{uploadPage.uploadedFile.submittedFileName}"/>
<br/>
<h:link outcome="index">戻る</h:link>
</h:form>
実行画面
ここでは表示してませんが、index.xhtmlに戻り再読み込みを連打するとたまに表示されます。
やってみたこと
・output.xhtmlでEL式ではなくシンプルに名前を直接入れてみる。→同じ結果
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+1
こんにちは。
気になったところは、バッキングビーンがRequestScopedであることです。ページ遷移後はインスタンスが保持されないのではないでしょうか。対処はSessionScoedにしてみるなど。
出来る時とできないときが有る理由が分からないので、他の要素も有るかもしれません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
check解決した方法
0
模索を続けていたら自己解決しました。
解決方法は画像の名前を一旦、データベースのほうへ保存し、データベースから画像の名前を取り出し参照することで解決することができました。
(やはり「#{uploadPage.uploadedFile.submittedFileName}」がうまく機能してなかったみたいです。)
回答してくださった方改めて
ありがとうございました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.20%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2019/02/23 01:49
いろいろ説明不足ですいませんでした。
回答を参考にしいろいろと模索してみます。