我面临输入文本字段行为的特殊问题。我使用模板创建了一个jsf页面。最终加载的页面有一个标题来显示徽标和菜单。内容页面有一个选项字段和一个输入文本框(h:inputText),还有commandLink(搜索)组件。当我在输入文本字段中输入任何值并单击搜索(commandLink)时,我正在进行ajax调用以获取输入文本字段中输入的值并下拉选择,与支持中的ajax调用关联的方法调用bean但为两个字段获取空值。当我首先加载主页然后单击菜单以加载该特定页面时,会发生这种情况。但是,当我通过在浏览器地址字段中提供url直接加载页面或使用菜单导航到其他页面并返回到此特定页面时,一切正常,因为我在辅助bean中获取了两个值。我找不到解决问题的方法,需要你的帮助。
以下是实施方面的一些重要观点。 1.只有一个h:表单在主模板中提到,并且在页面加载时没有找到多个表单。 2.菜单导航通过重定向而不是向前完成。 3.使用import javax.faces.bean.ViewScoped和托管bean注释的相同包,在viewScoped中使用Backing bean。 4.在页面中没有提到的带有任何jsf组件的immediate = true属性。 5.输入文本框有公共getter / setter方法,选择下拉列表。 6.我使用mojarra JSF库API作为主要JSF组件,使用weblogic 10.3.6作为app服务器,使用IE v8作为浏览器。
<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>
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时为字段分配。
寻找你的建议。
答案 0 :(得分:0)
我自己对JSF很陌生,但考虑到没有答案,我想为什么不试一试。
根据https://stackoverflow.com/a/3681276/2277482 如果你将支持bean中的一个属性分配给一个h:inputtext,它将在页面上更改后备用bean中的更新。所以你可以检查它是否以这种方式工作而没有输入文本上的ajax。
对于h:selectOneMenu我找到了https://stackoverflow.com/a/13327653/2277482。 因此,如果你想在没有素数面的情况下实现这个答案,请尝试f:ajax。
我无法在momemnt测试这个,但我只是盲目地给出建议。
我会评论这个,但我的代表太低了:(
答案 1 :(得分:0)
为您的bean创建一个构造函数
public beanname() { }
答案 2 :(得分:0)
我认为您错过了字段周围的<h:form>
标记。没有它,给execute=xy
是没用的,因为没有形式可以执行。