支持 Bean 方法对输入文本框变为空

Posted

技术标签:

【中文标题】支持 Bean 方法对输入文本框变为空【英文标题】:Backing Bean method is getting null against input text box 【发布时间】:2013-02-13 02:26:03 【问题描述】:

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

以下是实施方面的一些要点。 1.主模板中只提到了一个h:form,页面加载时找不到多个form。 2.菜单导航是通过重定向而不是前进完成的。 3. 支持 bean 在 vi​​ewScoped 中,导入 javax.faces.bean.ViewScoped 和托管 bean 注释的相同包。 4. 页面中没有提到immediate=true 属性的任何jsf 组件。 5.输入文本框和选择下拉有公共getter/setter方法。 6. 我使用 mojarra JSF 库 API 作为主要 JSF 组件,weblogic 10.3.6 作为应用服务器,IE v8 作为浏览器。

1。 JSF页面代码sn -p

<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 >
    <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 方法的字段提供空值,并在单击“搜索”commandLink 时分配给该字段。

寻找您的建议。

【问题讨论】:

【参考方案1】:

为你的 bean 创建一个构造函数

public beanname()  

【讨论】:

【参考方案2】:

我认为您只是缺少字段周围的&lt;h:form&gt; 标签。没有它,给execute=xy 是没有用的,因为没有要执行的表单。

【讨论】:

【参考方案3】:

我自己对 JSF 还很陌生,但考虑到还没有答案,我想为什么不试一试。

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

对于 h:selectOneMenu,我找到了 https://***.com/a/13327653/2277482。 因此,如果您想在没有 primefaces 的情况下实现该答案,请尝试 f:ajax。

虽然我暂时无法对此进行测试,所以我只是盲目地给出建议。

会评论这个,但我的代表太低了:(

【讨论】:

以上是关于支持 Bean 方法对输入文本框变为空的主要内容,如果未能解决你的问题,请参考以下文章

Jelly Bean WebView 不适用于文本框的 HTML maxlength 属性

如果之前有任何为空,则从可选的有序文本框中移动值

Asp.net中文本框非空验证及比较验证的一种简单方法

如何确保将空文本框文本作为 DBNull 输入到数据库中?

vba inputBox:如何用空文本框区分“取消”和“确定”之间的区别

如果文本框中没有文本,jQuery 自动完成返回空列表