我基本上想要做的是,当用户提交表单时,应该调用一个方法,而不是一个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.19 和 jsf-impl:2.1.19 jar。
这是我得到的例外:
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)
答案 0 :(得分:1)
没有
value
属性必须评估为property
表达式(使用其get
方法)。此外,如果控件不是只读的,则还必须提供set
方法。
其他属性(如action
中的h:commandButton
属性)接受的表达式会对bean中的方法进行求值,但不会接受这个。
唯一的解决方法是您已经执行的操作,并get
实施someMethod
。请注意,我不确定在渲染JSF页面时是否会调用该方法。
答案 1 :(得分: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;
}
由于在存储输入组件的值之后调用了action方法,因此可以毫无问题地访问它们。返回值用于JSF导航。它可以包含视图ID或导航结果。如果返回值为null,则JSF保持在同一页面上。