我遇到了一个无法解决的问题。
好吧,我们假设我们正在按一个按钮从网页(可能是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。
有什么想法吗?
非常感谢! 托马索
答案 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[]>
。