私は人を作成するビュースコープのbeanを持っています。人は写真を撮ることができます。この写真は人物と同じページにアップロードされます。写真は、データベースまたはディスクに保存されません(人物はまだ作成されていないため)。人は他の場所で作成でき、同じBeanを使用するため、Beanはビュースコープにする必要があります。 Beanがセッションスコープで、ユーザーが画像をアップロードしてもその人物を保存しない場合は、次にユーザーが人物を作成しようとしたときに画像が表示されます。JSFでアップロードした画像を表示
私は2つの豆を使ってこれを解決しました。 1つのビューのスコープ付きBeanを使用してユーザーを作成し、セッションスコープ付きBeanを使用してピクチャをアップロードし、ピクチャをストリームとして取得します。しかし、これは上記の問題を引き起こします。
どうすればこの問題を解決できますか?
アップロード豆:
@ManagedBean(name = "uploadBean")
@SessionScoped
public class UploadBean
{
private UploadedFile uploadedFile;
public UploadedFile getUploadedFile()
{
return uploadedFile;
}
public StreamedContent getUploadedFileAsStream()
{
if (uploadedFile != null)
{
return new DefaultStreamedContent(new ByteArrayInputStream(uploadedFile.getContents()));
}
return null;
}
public void uploadFile(FileUploadEvent event)
{
uploadedFile = event.getFile();
}
}
作成-人の豆:
@ManagedBean(name = "personBean")
@ViewScoped
public class PersonBean
{
private Person newPerson = new Person();
public Person getNewPerson()
{
return newPerson;
}
private UploadedFile getUploadedPicture()
{
FacesContext context = FacesContext.getCurrentInstance();
ELContext elContext = context.getELContext();
UploadBean uploadBean = (UploadBean) elContext.getELResolver().getValue(elContext, null, "uploadBean");
return uploadBean.getUploadedFile();
}
public void createPerson()
{
UploadedFile uploadedPicture = getUploadedPicture();
// Create person with picture;
}
}
関連するJSFページの一部:私は異なるために行ってきた
<h:form enctype="multipart/form-data">
<p:outputPanel layout="block" id="personPicture">
<p:graphicImage height="150"
value="#{uploadBean.uploadedFileAsStream}"
rendered="#{uploadBean.uploadedFileAsStream != null}" />
</p:outputPanel>
<p:fileUpload auto="true" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
fileUploadListener="#{uploadBean.uploadedFile}"
update="personPicture" />
<p:commandButton value="Save" actionListener="#{personBean.createPerson()}"/>
</h:form>
興味深いことに、JSFでの例を尋ねて、「Javascript/JQueryの魔法」で終わりました。他の答えに対するあなたのコメントは、彼の例がとてもいいので、欲張り以上のものです。あなたの仕事をかなりうまくやるJSFの方法がたくさんあります.JSをここに入れる必要はありません。質問や回答を編集してもらえますか?質問と回答が合わない。 – alexander
答えは私が持っていた問題を解決しました。私はまた、質問が2012年7月16日であることを述べたいと思います。それは2年以上前です。私はこの質問が私にとって無関係だと言うことはできます。私の答えに何か問題があれば、それを編集することができます。 ;-) – siebz0r