私は自分の頭を傷つけて、なぜこれがもう機能しないのか考えようとしています。動的ページ<ui:include src="subpages/#{bean.subpage}.xhtml>
とサブページのBeanフィールドの値を設定するコマンドリンクがあります。 BeanはセッションスコープのSpring Beanです。すべてうまくいいです。しかし、commandLinkをクリックすると、<ui:include>
がサブページフィールドの現在の値を読み取っていることがわかりました。その前に、フィールドの新しい値を設定するアクションが呼び出されます。JSF 2動的ui:古いBeanフィールドの値を読み取ることを含む
<h:form id="navform">
<h:panelGrid columns="1">
<h:commandLink value="Page 2" action="#{navigateTestBean.navigateToSection('page2')}"/>
<h:commandLink value="Page 3" action="#{navigateTestBean.navigateToSection('page3')}"/>
</h:panelGrid>
</h:form>
<h:panelGroup id="mainArea">
<ui:include src="subpages/#{navigateTestBean.sectionName}.xhtml"/>
</h:panelGroup>
と
@Service
@Scope("session")
public class NavigateTestBean {
private String sectionName;
@PostConstruct
private void doSetup() {
sectionName = "general";
}
public String navigateToSection(String sectionName) {
this.sectionName = sectionName;
return null;
}
public String getSectionName() {
return sectionName;
}
public void setSectionName(String sectionName) {
this.sectionName = sectionName;
}
}
私は、リンクをクリックしPAGE2を言うために、getSectionName()最初の時間は、 "一般的な" 読みと呼ばれ、その後、navigateToSection()は次のとおりです。以下の私の現在のコードを考えますと呼ばれる。それ以上のgetSectionName()は呼び出されないので、ui:includeは汎用サブページのレンダリングを再び終了します。次にcommandLinkをクリックすると、同じかどうかにかかわらず、最終的にpage2(新しい値に設定される前のsectionNameの現在の値)がレンダリングされます。
また、BalusCの他の回答の1つに記載されているように、動作に変更はなく、コマンドリンクを<f:ajax render=":mainArea">
にラップしてみました。
私は何か愚かな小さなものがありますか? EL 2.2パーサー、Mojarra 2.0.2、RichFacesでTomcat 6.0.33を実行しています。ありがとうございます!
私のために働きます。私は春を使用していないので、 '@managedbean'と '@seesionscope'で注釈を付ける必要がありました。また、私のELバージョンはあなたが持っているものとは異なりますが、これは重要ではありません.Webflowを使用している場合、これはJSF管理Beanです。 page2をクリックするとsetion2が表示され、page3をクリックするとsection3が表示されます。 –
「getSectionName」が呼び出されていないことを確認してください。デザインの観点からは非常に奇妙な問題ではないが、問題を引き起こすべきではないという事実以外の私には大丈夫だ。このアプリケーションの設計とアーキテクチャについてもう少し詳細を述べることができるかもしれない。どのくらい必要に応じてzipファイルを投稿することもできます。 – Shahzeb