在JSF页面中重置输入表单

在JSF页面中重置输入表单,jsf,Jsf,我需要用一些输入表单构建一个JSF页面,当单击“保存”时,所有这些信息都必须存储。特别是输入表单需要提交一个字符串,然后系统进行一些检查并存储或丢弃该字符串(例如,我需要在日历中保存一个事件并添加其他人)。 我试图只使用一个视图范围的bean,但是当我调用该方法检查字符串时,bean被破坏了,所以我更改了该方法以返回一个空字符串,一切正常,但是当我重新加载页面时,输入表单仍然充满了旧信息。 如何重置输入或如何改进解决方案。 感谢您的帮助在操作方法中使用字段值后,只需将其填充为空白值并重新呈现表单

我需要用一些输入表单构建一个JSF页面,当单击“保存”时,所有这些信息都必须存储。特别是输入表单需要提交一个字符串,然后系统进行一些检查并存储或丢弃该字符串(例如,我需要在日历中保存一个事件并添加其他人)。 我试图只使用一个视图范围的bean,但是当我调用该方法检查字符串时,bean被破坏了,所以我更改了该方法以返回一个空字符串,一切正常,但是当我重新加载页面时,输入表单仍然充满了旧信息。 如何重置输入或如何改进解决方案。
感谢您的帮助

在操作方法中使用字段值后,只需将其填充为空白值并重新呈现表单即可。下面是一个例子:

Facelets代码

<h:form>
    <h:input value="#{theBean.theString}" />
    <h:commandButton value="Submit" action="#{theBean.action}">
        <f:ajax render="@form" />
    </h:commandButton>
</h:form>

在使用了
String
类型的字段或属性的值后,将其重置为空字符串是一个错误的建议:)我知道这不好,但目前它仍然有效。我可以把bean分成两部分吗:一个requestedScope,保存后将我重定向到另一个页面,并注入另一个viewScope,保存后返回void,这样bean就会被销毁。@Tiny我不知道这怎么可能是个错误的建议。Pool,这可能也行,但表单不会被重置。好吧,我只是说其他人已经在某处提到了什么(但我目前没有一些来源可以引用)。他们基本上倾向于说,当
String
对象实际上打算为
null
时,用空字符串初始化该对象会不必要地占用
String
的实例,占用不必要的内存。因此,练习空字符串本身并不是一件好事。相反,在某些特殊情况下,可能需要/适当地将
字符串
初始化为空字符串-肯定无法避免相反的情况。@Tiny噢,你是说用空字符串代替空字符串。我认为问题在于如何清理表单中的字段。我只能说:它不是2MB的ram,所以在一个实际的web应用程序中,您将为服务器提供至少512MB的ram,字符串池中的一个空字符串不会造成太大的伤害。如果应用程序在内存中很重要,例如小型设备,则此空字符串可能会产生影响。这取决于您将使用它的环境。
@ManagedBean
@ViewScoped
public class TheBean {
    private String theString;
    //getters and setters

    public void action() {
        //do something with the submitted value of theString
        //at the end, clean it manually
        theString = "";
    }
}