2016-11-13 48 views
1

我試圖通過JSF實現聊天系統。在按下h:commandButton後,h:inputText內的所有文字將被保存。在此之後,我有一張表格來打印迄今爲止輸入的所有數據。這樣一來,我對JSF以下代碼:只有gettable的JSF

<h:form> 
    <h:inputText id="id1" value="#{unicoBean.text}" /> 
    <h:commandButton id="botao" value="Entrar" action="#{unicoBean.test}" 
     onclick="test()" 
    /> 
</h:form> 
<h:dataTable value="#{unicoBean.all}" var="msg"> 
    <h:column> 
    #{msg.text} 
</h:column> 
</h:dataTable> 
<script> 
    function test() { 
     alert("alert"); 
    } 
</script> 

這對於backbean:

@ManagedBean 
public class UnicoBean { 
Facade f = new Facade(); 

public void setText(String s) throws Exception { 
    f.setText(s); 
    } 

public List<Message> getAll() throws Exception { 
    return f.getAll(); 
    } 

public void test() { 
    System.out.println("bean called on jsf"); 
    } 
} 

內H:inputText的我只想設定值,而不是讓他們扔回到HTML。不幸的是,即使我不想得到任何東西,只有設置,暴露在我的Bean上,JSF纔會說「表達式不可獲取」。我如何解決這個問題?

回答

1

使用getter/setter策略無法實現此目標,因爲它不是JSF的一部分,而是表達式語言(EL)。 JSF只使用它的HTML組件的數據綁定到一個bean通過適當的干將領域和setter

但是,您可以使用binding屬性通過UIInput通過輸入字段的值作爲參數傳遞給您的操作按鈕:

<h:form> 
    <h:inputText id="id1" binding="#{input1}" /> 
    <h:commandButton id="botao" value="Entrar" action="#{unicoBean.test(input1.value)}" 
     onclick="test()" /> 
</h:form> 

然後收到你的操作方法的新值:

public void test(String value) { 
    System.out.println("bean called on jsf: " + value); 
}