簡體   English   中英

將JSF inputText與支持bean的字段鏈接而不顯示其值

[英]Linking JSF inputText with backing bean's field without showing its value

我有這樣的支持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!
這是簡化的代碼,我在其他地方使用testStringtestString有值,我想隱藏它! 我想保持這個價值。

如果它確實是請求/視圖范圍的 bean,那么您可能是瀏覽器內置自動完成/自動填充功能的犧牲品。 您可以通過向相關輸入組件添加autocomplete="off"來關閉它。

<h:inputText ... autocomplete="off" />

再次注意,不是JSF填充了輸入,而是webbrowser本身。 清除瀏覽器緩存,您將看到瀏覽器不再執行此操作。 根據瀏覽器品牌/版本,您還可以將其重新配置為自動填充不那么急切。


更新 :根據您的問題更新,您的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實際上也是在會話范圍內。

您應該將輸入文本綁定到輔助bean中的其他字段。 如果要將該字段用於testString ,請將輸入的值復制到testAction方法中的testString

<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">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM