入力テキスト フィールドの動作に関する特有の問題に直面しています。テンプレートを使用してjsfページを作成しました。最終的にロードされたページには、ロゴとメニューを表示するヘッダーがあります。コンテンツ ページには、オプション フィールドと 1 つの入力テキスト ボックス (h:inputText) があり、commandLink (検索) コンポーネントがあります。入力テキスト フィールドに任意の値を入力して Search(commandLink) をクリックすると、入力テキスト フィールドに入力された値を取得するために ajax 呼び出しが行われ、バッキングの ajax 呼び出しに関連付けられたメソッドがドロップダウン選択されます。 Bean が呼び出されますが、両方のフィールドで null 値が取得されます。このケースは、最初にホームページを読み込んでから、メニューをクリックしてその特定のページを読み込んでいるときに発生します。しかし、ブラウザのアドレス フィールドに URL を指定してページを直接ロードするか、メニューを使用して他のページに移動し、この特定のページに戻ると、バッキング Bean で両方の値を取得しているため、すべてが正常に機能しています。私はそれを解決する方法を見つけることができず、あなたの助けが必要です.
ここでは、実装上の重要なポイントをいくつか示します。1. マスター テンプレートに記載されている h:form は 1 つだけであり、ページが読み込まれるときに複数のフォームは見つかりません。2. メニュー ナビゲーションは、転送ではなくリダイレクトによって行われます。3. バッキング Bean は、インポート javax.faces.bean.ViewScoped およびマネージド Bean アノテーション用の同じパッケージで viewScoped にあります。4. jsf コンポーネントを含むページには、immediate=true 属性が記載されていません。5. 入力テキスト ボックスと選択ドロップダウン用の public getter/setter メソッドがあります。6. mojarra JSF ライブラリ API をプライマリ JSF コンポーネントとして、weblogic 10.3.6 をアプリ サーバーとして、IE v8 をブラウザとして使用しています。
1. JSF ページのコード スニペット
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" xmlns:o="http://openfaces.org/">
<ui:composition
template="/resources/common/templates/rsaMasterTemplate.xhtml">
<ui:define name="content">
<f:view>
<h:outputScript name="js/security.js" library="common" />
<h:panelGroup>
<table width="50%">
<tr class="scrollerTable border">
<td><h:outputLabel styleClass="fieldLabelText"
value="#{message['application.common.label.searchBy']}" /></td>
<td class="cellSpacer"></td>
<td><h:selectOneMenu id="selOneMenu_SearchCriteria"
styleClass="entryfieldText"
value="#{urlMaintenanceManagedBean.selectedSearchCriteria}">
<f:selectItems
value="#{urlMaintenanceManagedBean.searchCriteriaList}" />
</h:selectOneMenu></td>
<td class="cellSpacer"></td>
<td><h:inputText id="iptTxt_SearchValue"
styleClass="entryfieldText" size="30"
value="#{urlMaintenanceManagedBean.searchValue}"></h:inputText>
</td>
<td class="cellSpacer"></td>
<td><h:commandLink styleClass="buttonOrange">
<f:ajax event="click"
execute="selOneMenu_SearchCriteria iptTxt_SearchValue"
render="panGrp_UrlSearchResults"
listener="#{urlMaintenanceManagedBean.search}" />
<span>#{message['application.common.button.search']}</span>
</h:commandLink></td>
<td class="cellSpacer"></td>
<td><h:commandLink styleClass="buttonOrange"
onclick="clear('iptTxt_SearchValue')">
<span>#{message['application.common.button.clear']}</span>
</h:commandLink></td>
</tr>
</table>
</h:panelGroup>
2. バッキングビーン方式
public void search(AjaxBehaviorEvent event) {
// TODO Temporary hard coding. To be removed once the value passing to
// bean gets resolved.
System.out.println("selectedSearchCriteria= " + selectedSearchCriteria);
System.out.println("SearchValue= " + searchValue);
// reset urlList
if (urlList != null && !urlList.isEmpty()) {
urlList = null;
}
// Call to service layer for search operation starts here
}
public String getSelectedSearchCriteria() {
return selectedSearchCriteria;
}
public void setSelectedSearchCriteria(String selectedSearchCriteria) {
this.selectedSearchCriteria = selectedSearchCriteria;
}
public String getSearchValue() {
return searchValue;
}
public void setSearchValue(String searchValue) {
this.searchValue = searchValue;
}
上記の SOP 行は、getter/setter メソッドを持ち、"Search" commandLink がクリックされたときにフィールドに対して割り当てられたフィールドに null 値を与えます。
あなたの提案を探しています。