2013-04-14 90 views
-3

我基本上想要做的是,當用戶提交表單時,應該調用一個不是setter的方法。如何在JSF頁面上提交表單時調用方法?

這是我曾嘗試:

<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罐子。

這是我收到異常:

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) 

回答

1

value屬性計算結果必須爲property表達(其get方法)號。此外,如果控件不是隻讀的,還必須提供set方法。

其他屬性(如來自h:commandButtonaction屬性)接受表達式,該表達式對bean中的某個方法進行計算,但不包括這一個。

唯一的解決方法是您已經做了,使get實施someMethod。請注意,我不確定在渲染JSF頁面時該方法將被調用。

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保持在同一頁面上。

+0

那麼,我想要做的是實際上從文本字段獲取輸入,並用它的值調用方法。我想這是不可能的。感謝你的回答。 –

+0

這不完全是JSF工作的方式(對於這種情況)。只需在bean上使用一個值表達式,例如'''。然後你可以在action方法中使用'answer'屬性的值。 – Michi

相關問題