Backing Bean方法对输入文本框获取null



我正面临一个输入文本字段行为的特殊问题。我用模板创建了一个jsf页面。最后加载的页面有一个显示徽标和菜单的标题。内容页有一个选项字段和一个输入文本框(h:inputText),还有一个commandLink (Search)组件。当我在输入文本字段中输入任何值并单击Search(commandLink)时,我正在进行ajax调用以获取在输入文本字段中输入的值,并下拉select,调用与支持bean中ajax调用关联的方法,但为两个字段获取空值。这种情况发生在我首先加载主页,然后单击菜单以加载该特定页面时。但是,当我通过在浏览器地址字段中提供url直接加载页面或使用菜单导航到其他页面并返回到该特定页面时,一切都很正常,因为我在后台bean中获得了这两个值。我找不到解决的方法,需要你的帮助。

在实现方面有一些要点。1. 只有一个在主模板中提到的h:表单,加载页面时找不到多个表单。2. 菜单导航是通过重定向而不是转发来完成的。3.通过导入javax.faces.bean.ViewScoped和托管bean注释的相同包,支持bean在viewScoped中。4. 在任何jsf组件的页面中都没有提到immediate=true属性。5. 有公共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。支持bean方法

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"命令链接时针对该字段分配空值。

征求您的意见

我自己也是JSF的新手,但是考虑到还没有答案,我想为什么不试一试呢。

根据https://stackoverflow.com/a/3681276/2277482如果您将支持bean中的属性分配给h:inputtext,如果在页面上更改,它将在支持bean中更新。因此,您可以检查它是否以这种方式工作,而无需在输入文本上添加ajax。

对于h:selectOneMenu,我找到https://stackoverflow.com/a/13327653/2277482。因此,如果你想实现这个答案,而不需要初始面,试试f:ajax.

我目前还不能测试这个,所以我只是盲目地给出建议。

本想评论这个,但是我的代表太低了:(

我想你只是错过了<h:form>标签周围的字段。如果没有这个,给出execute=xy是无用的,因为没有要执行的表单。

为bean创建一个构造函数

public beanname() { }

相关内容

  • 没有找到相关文章