2010-10-14 116 views
0

我在面板網格內有一個輸入文本區域。此面板網格僅在勾選複選框時呈現。我正在使用值更改偵聽器來偵聽複選框以呈現文本區域。這種渲染機制起作用,但問題是我無法檢索用戶在文本區域中輸入的值。它總是返回null。任何幫助讚賞。無法保留我的輸入文本

// if box is checked, input text area is rendered 
public void showURL(ValueChangeEvent event) { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    boolean value = (Boolean) event.getNewValue(); 
    setRenderURL(value); 
    context.renderResponse(); 
} 

<h:panelGrid columns="2" > 
<h:outputLabel value="Is position vacant?" /> 
<h:selectBooleanCheckbox valueChangeListener="#{formBean.showURL}" 
       onclick="submit()" 
      immediate="true" /> 
</h:panelGrid> 

<h:panelGrid columns="2" rendered="#{formBean.renderURL}" > 
<h:panelGroup> 
    <h:outputLabel value="Link: "/> 
      // trouble here: getURL always returns null 
    <h:inputText size="60" value="#{formBean.URL}" /> 
</h:panelGroup> 
</h:panelGrid> 

回答

0

添加

<h:inputHidden value="#{formBean.renderURL}" /> 

到相同的形式,使得對於所呈現的屬性的狀態,其中輸入部件被處理的請求期間被保留。 JSF即不會驗證/轉換/更新輸入組件,只要其屬性rendered或其中一位父母評估false

+0

不真的跟着隊友。我理解的原因,但不是代碼。所以我會有兩個#{formBean.renderURL}? – 2010-10-15 02:57:34

+0

在'rendered'屬性中使用的一個不會被提交給服務器。 'h:inputHidden值'中的那個將會是。這樣JSF知道'renderURL'的原始值。否則,在給定問題的情況下,JSF將使用其*默認*值,這顯然是'false'。 – BalusC 2010-10-15 03:01:03