6

私はこのようなバッキングBeanを持っています:

@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を初めて使用するので、手伝ってもらえますか?
敬具!

UPD!
それは単純化されたコードであり、私はtestString他の場所で使用してtestStringいて、私が隠したい価値を持っています!そして、私はこの値を維持したいと思います。

4

3 に答える 3

7

それが本当にリクエスト/ビュースコープの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のプロパティに格納することもできます。これは、たとえば、実際にはセッションスコープにあります。

于 2013-01-18T14:36:05.867 に答える
2

入力テキストをバッキングBeanの他のフィールドにバインドする必要があります。また、そのフィールドをに使用する場合は、入力した値をメソッドにtestStringコピーします。testStringtestAction

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

public String testAction()
{
    testString = copyTestString;
    return "destinationPage";
}
于 2013-01-18T14:40:34.057 に答える
1

一部のブラウザはオートコンプリートを無視します-フォームタグにオートコンプリートを入れると役立ちます:

<h:form autocomplete="off">
于 2015-12-03T10:35:55.877 に答える