JSF只有gettable

时间:2016-11-13 16:28:26

标签: java jsf-2

我正在尝试通过JSF实现聊天系统。在h:inputText内输入的所有文字都将在按下h:commandButton后存储。在此之后,我有一个表来打印到目前为止输入的所有数据。这样,我有以下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。不幸的是,JSF说“表达式是不可获取的”,即使我不想得到任何东西,只是设置,就像在我的Bean上暴露一样。我怎么解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用getter / setter策略无法实现这一点,因为它不是JSF的一部分,而是表达式语言(EL)。 JSF仅使用它通过适当的getter和setter将HTML组件的数据绑定到bean的字段

但是,您可以通过UIInput使用binding属性将输入字段值作为参数传递到操作按钮:

<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);
}