如何在提交后访问表单数据

时间:2010-10-13 09:27:48

标签: java jsf forms

我遇到了一个无法解决的问题。

好吧,我们假设我们正在按一个按钮从网页(可能是jsp,xhtml,portlet ......)调用一个方法(在一个支持bean中)。

<h:form>
....
<h:inputText value="#{errorManager.errorTestDataBean.errore00}" />

<h:commandButton id="go" value="GO" action="#{errorManager.triggerError}" />
...
</h:form>

表单以及其值提交。

我们还假设在行动过程中我们会遇到问题(例外)。

我编写(并注册)了一个ActionListener,它将捕获未处理的异常(并且会做一些事情来处理它):

public class ExceptionHandlingActionListener extends ActionListenerImpl
{

public void processAction(ActionEvent event)
{
try
{
super.processAction(event); //+THE ERROR HAPPENS IN THE SUPER CLASS+ 
}
catch(Exception exception)
{
exception.printStackTrace();
......... do something here ...............

FacesContext facesContext = FacesContext.getCurrentInstance();
Application application = facesContext.getApplication();
NavigationHandler navigationHandler = application.getNavigationHandler();
navigationHandler.handleNavigation(facesContext, null, "error"); /* FORWARD TO AN ERROR PAGE */
facesContext.renderResponse();
}
}
}

效果很好......但是......我需要知道提交表单中的数据(是?)。

如何获取此信息?我想要一个泛型方法,因为错误可能发生在应用程序的任何地方(我真的不知道clientId或其他有关对象的特殊信息)。

获取所有发布的数据并将其写入数据库也是可以的:我将在以后分析数据!!

不幸的是,我们仍然在JSF 1.2。

有什么想法吗?

非常感谢! 托马索

1 个答案:

答案 0 :(得分:5)

那么,您想获取所有请求参数吗?

在bean中你可以这样做:

ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
Map<String, String[]> paramValues = ec.getRequestParameterValuesMap();

在视图中(假设JSP),您可以执行以下操作:

<ul>
    <c:forEach items="${paramValues}" var="entry">
        <li>${entry.key}:
            <c:forEach items="${entry.value}" var="value" varStatus="loop">
                ${value}${!loop.last ? ', ' : ''}
            </c:forEach>
        </li>
    </c:forEach>
</ul>

${paramValues}隐式引用HttpServletRequest#getParameterMap(),返回Map<String, String[]>