【问题标题】:How to call a method when a form is submitted on a JSF page?在 JSF 页面上提交表单时如何调用方法?
【发布时间】:2013-04-06 22:21:39
【问题描述】:

我基本上想做的是,当用户提交表单时,应该调用一个方法,而不是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)

【问题讨论】:

    标签: jsf el


    【解决方案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 停留在同一页面上。

    【讨论】:

    • 好吧,我想要做的实际上是从文本字段中获取输入,并使用它的值调用一个方法。我想这是不可能的。感谢您的回答。
    • 这不是 JSF 的工作方式(对于这种情况)。只需对 bean 上的属性使用值表达式,例如 &lt;h:inputText value="#{quizBean.answer}"/&gt;。然后就可以在action方法中使用answer属性的值了。
    【解决方案2】:

    没有。

    value 属性必须计算为property 表达式(使用其get 方法)。而且,如果控件不是只读的,还必须提供set方法。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多