将JSF inputText与支持bean的字段链接而不显示其值

bsi*_*nau 6 java jsf-2

我有这样的支持bean:

@ManagedBean
@SessionScoped
public class TestBean {

    private String testString;

    public String getTestString() {
        return testString;
    }

    public void setTestString(String testString) {
        this.testString = testString;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的xhtml页面也非常简单:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"    
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      >

    <h:head></h:head>

    <h:body>

        <h:form>
            <h:inputText value="#{testBean.testString}"/>
            <h:commandButton action="#{testController.testAction}"/>
        </h:form>

    </h:body>

 </html>
Run Code Online (Sandbox Code Playgroud)

我想要的一切 - 渲染我的h:inputText元素没有价值(空).
我是JSF的新手,所以,你能帮助我吗?
最诚挚的问候!

UPD!
它是简化的代码,我testString在其他地方使用并且testString有价值,我想隐藏它!我想保持这个价值.

Bal*_*usC 7

如果它确实是请求/视图范围的 bean,那么您可能是浏览器内置自动完成/自动填充功能的牺牲品.您可以通过添加autocomplete="off"到相关输入组件来关闭它.

<h:inputText ... autocomplete="off" />
Run Code Online (Sandbox Code Playgroud)

再次注意,不是JSF填充了输入,而是webbrowser本身.清除浏览器缓存,您将看到浏览器不再执行此操作.根据浏览器品牌/版本,您还可以将其重新配置为自动填充不那么急切.


更新:根据您的问题更新,您的bean结果是会话作用域.这不是基于请求/视图的表单的正常范围.会话范围的bean实例在同一HTTP会话中的所有浏览器窗口/选项卡(读取:所有请求/视图)之间共享.您通常只在登录会话中存储登录用户及其首选项(语言等).关闭并重新启动整个浏览器或使用其他浏览器/计算机时,您将只获得一个全新的实例.

将其更改为请求或视图作用域.在这个特殊的简单示例中,请求范围应该足够:

@ManagedBean
@RequestScoped
Run Code Online (Sandbox Code Playgroud)

也可以看看:


根据评论更新2,

哦,对,我最好使用@RequestScoped.但它并没有解决我的问题 - 我想保留这个值,但我不想在textInput中显示它.在请求 - 响应周期的上下文中,此值很重要.

具体的功能要求现在更加明确(在未来的问题中,请在准备问题时注意这一点,我不知道你最初是这样问的).在这种情况下,使用带有2个属性的视图范围bean,如下所示:

@ManagedBean
@ViewScoped
public class TestBean {

    private String testString;
    private String savedTestString;

    public void testAction() {
        savedTestString = testString;
        testString = null;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

或者,您也可以将其存储在数据库或注入的托管bean的属性中,该托管bean实际上也是在会话范围内.