java - 仅具有 gettable 的 JSF

标签 java jsf-2

我正在尝试通过JSF实现一个聊天系统。按下 h:commandButton 后,将存储在 h:inputText 中输入的所有文本。之后,我有一个表格来打印到目前为止输入的所有数据。这样,我就有了以下 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 说“Expression is not gettable”,即使我不想获取任何东西,只想设置,如我的 Bean 上公开的那样。我该如何解决这个问题?

最佳答案

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

但是,您可以通过UIInput使用绑定(bind)属性将输入字段值作为参数传递给操作按钮:

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

关于java - 仅具有 gettable 的 JSF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40576124/

相关文章:

mysql - Glassfish Hibernate JPA 2.0 异常

jsf-2 - 如何使用 JSF 设置 HTTP 状态码?

java - Tomcat 显示空白页 - GWT devmode 工作正常

javascript - 如何在JSF2中渲染AJAX部件时添加JS效果?

jsf - JSF <h :commandButton> 中 PrimeFaces 的 oncomplete 属性

java - 调用 query.list() 后 Hibernate session 关闭

java - 关于servlet的正确使用方法的问题

java - SQL更新语句不改变记录

java - 错误 error.GrailsExceptionResolver - 无法引用隐式元素

java - json 中的 ObjectMapper.readvalue