-3

我基本上想做的是,当用户提交表单时,应该调用一个方法,而不是setter。

这是我尝试过的:

<h:form>
    <p>
        Your guess: <h:inputText value="#{quizBean.someMethod()}"/>
    </p>
    <p>
        <h:commandButton value="Submit answer"/>
    </p>
</h:form>

它也不适用于#{quizBean.someMethod}

如果我创建一个名为someMethod的字段并为其生成getter 和 setter,它将正常工作。

有没有办法做到这一点?

我的 web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

我在 Tomcat 7.0 上运行它并使用jsf-api:2.1.19jsf-impl:2.1.19 jars。

这是我得到的例外:

javax.servlet.ServletException: /index.xhtml @23,71 value="#{quizBean.someMethod()}": Property 'someMethod' not found on type com.tugay.problems.QuizBean
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
4

2 回答 2

1

不。

value属性必须评估为一个property表达式(使用它的get方法)。此外,如果控件不是只读的,set还必须提供方法。

其他属性(例如actionfrom 的属性h:commandButton)接受计算结果为 bean 中方法的表达式,但不是这个。

唯一的解决方法是你已经做过的,制作get工具someMethod. 请注意,我不确定在呈现 JSF 页面时是否会调用该方法。

于 2013-04-14T21:32:30.160 回答
1

您想在表单提交上调用方法吗?这正是h:commandButton为此而生的。只需将action属性添加到命令按钮并将其指向如下操作方法:

<h:inputText value="#{quizBean.answer}"/>
<h:commandButton value="Submit answer" action="#{quizBean.submitAnswer}"/>

bean 上的方法应如下所示:

public String submitAnswer() {
  // Do something with property answer
  return null;
}

由于在存储输入组件的值之后调用操作方法,因此您可以毫无问题地访问它们。返回值由 JSF 用于导航。它可以包含视图 ID 或导航结果。如果返回值为 null,则 JSF 停留在同一页面上。

于 2013-04-15T06:35:15.750 回答