我有这样的支持豆:
@ManagedBean
@SessionScoped
public class TestBean {
private String testString;
public String getTestString() {
return testString;
}
public void setTestString(String testString) {
this.testString = testString;
}
}
我的 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>
我想要的只是渲染我的
h:inputText
元素没有值(空)。
我是 JSF 新手,你能帮我吗?
更新!
这是一个简化的代码,我在其他地方使用
testString
,并且testString
具有价值,我想隐藏它!我想保留这个值。
如果它确实是一个请求/视图范围 bean,您可能是浏览器内置自动完成/自动填充功能的受害者。您可以通过将
autocomplete="off"
添加到相关输入组件来将其关闭。
<h:inputText ... autocomplete="off" />
再次注意,填充输入的不是 JSF,而是 Web 浏览器本身。清除浏览器缓存,您会发现浏览器不再执行此操作。根据浏览器品牌/版本,您还可以重新配置它以不那么急切地自动完成。
更新:根据您的问题更新,您的 bean 被证明是会话范围的。这不是基于请求/视图的表单的正常范围。会话范围的 bean 实例在同一 HTTP 会话中的所有浏览器窗口/选项卡(即:所有请求/视图)之间共享。您通常只在会话中存储登录用户及其首选项(语言等)。只有当您关闭并重新启动整个浏览器或使用不同的浏览器/计算机时,您才会获得一个全新的实例。
将其更改为请求或查看范围。在这个特定的简单示例中,请求范围应该足够了:
@ManagedBean
@RequestScoped
根据评论更新2,
哦,对了,我使用@RequestScoped 更好。但这并不能解决我的问题 - 我想保留这个值,但我不想在 textInput 中显示它。该值在请求-响应周期的上下文中很重要。
具体的功能需求现在更加清晰了(在以后的问题中,请注意,在准备问题时,我不知道你最初是这样问的)。在这种情况下,请使用具有 2 个属性的视图范围 bean,如下所示:
@ManagedBean
@ViewScoped
public class TestBean {
private String testString;
private String savedTestString;
public void testAction() {
savedTestString = testString;
testString = null;
}
// ...
}
您也可以将其存储在数据库或注入的托管 Bean 的属性中,例如,该属性实际上位于会话范围内。
您应该将输入文本绑定到支持 bean 中的其他字段。如果您想将该字段用于您的
testString
,请将输入的值复制到 testString
方法中的 testAction
。
<h:form>
<h:inputText value="#{testBean.copyTestString}"/>
<h:commandButton action="#{testController.testAction}"/>
</h:form>
public String testAction()
{
testString = copyTestString;
return "destinationPage";
}
一些浏览器忽略自动完成 - 它可以帮助将自动完成放在表单标签中:
<h:form autocomplete="off">