JSF ときれいな顔でのリダイレクトに問題があります。私はこのようなことにまったく慣れていないので、リダイレクトを機能させることができないので、助けが必要です。
基本的に、私はかなりの設定でこれを持っています:
<url-mapping id="newProject">
<pattern value="/newProject/" />
<view-id value="/faces/project/newProject.xhtml" />
<action>#{projectController.initNewProject}</action>
</url-mapping>
<url-mapping id="project">
<pattern value="/project/" />
<view-id value="/faces/project/projectIdx.xhtml" />
</url-mapping>
関数 initNewProject は次のようになります。
public String initNewProject() throws IOException {
project = this.createProject(123415, "1234578943148", "KB25");
System.out.println(project);
return "pretty:project";
}
project は ProjectController のフィールドです。
@Named
@ConversationScoped
public class ProjectController implements Serializable {
private transient Project project;
...
URL が ../newProject/ から ../project/ に変わり、/faces/project/newProject.xhtml の内容が表示されるので、リダイレクトは思い通りに機能します。しかし、リダイレクト中に ProjektController のコンストラクターが呼び出され、フィールド プロジェクトが null になることがあります。
私が変われば
return "pretty:project";
に
return "/project/projectIdx.xhtml";
すべて正常に動作します。プロジェクトの内容がWebページに表示されます。ただし、URL は変更されません。../newProject/ のままで、ユーザーが F5 キーを押すと、新しいプロジェクトが作成されますが、これは悪いことです。
他のいくつかの理由で、プロジェクトをセッションに保存できないため、これはオプションではありません。
initNewProject 中に作成されたプロジェクトの内容を newProject.xhtml に表示させたいので、リダイレクトでコントローラーを再作成したくありません。
これはどのように達成できますか?
どうもありがとう!
マイケル