jsf - java.lang.UnsupportedOperationException : Cannot set ServletRequest Parameter

标签 jsf jsf-1.2 http-request-parameters

我正在开发一个 JSF 1.1 项目。

JSP:

<h:column>
        <f:facet name="header"> <h:outputText value="Edit" />     </f:facet>

        <h:commandLink rendered="#{(Table1_var.status == 'CONFIRMED') or (Table1_var.status == 'CHECKED_IN')}"
            action="#{Table1_var.onEditReservation}">
            <h:graphicImage id="view-details-link" alt="Drill Down on the Dynamic Link!"
                    url="images/editReservationSmall.png" styleClass="view-details-img"/>
           <f:param
                name="VastuId"
                value="#{Table1_var.id}" />                 
        </h:commandLink>

        <f:facet name="footer"><h:outputText value="Edit" /> </f:facet>                
    </h:column>

<f:param>VastuId参数被分配为 id 。因为var=Table1_var我不知道它与类映射到哪里。但我通过手动搜索获得了类/方法,可以从哪里获取该值:

public void navReservationDetail(final ActionEvent e) {
    Calendar cal1 = Calendar.getInstance();
    String rowId = FacesHelper.getRequestParameter("VastuId");
    System.out.println("ID :"+rowId);
}

FacesHelper.getRequestParameter

public static String getRequestParameter(String parameter) {
    return (String) FacesContext.getCurrentInstance().getExternalContext()
            .getRequestParameterMap().get(parameter);
}

我想通过 Java 手动设置该参数,而不使用 UI。我尝试使用这个:

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().put("#{VastuId}", reservationBean.getParentReservationProperty());              
String rowId = FacesHelper.getRequestParameter("VastuId");
System.out.println("selectedVastuId = "+rowId);

它在 getRequestParameterMap().put() 处抛出异常

java.lang.UnsupportedOperationException: Cannot set ServletRequest Parameter
at org.apache.myfaces.context.servlet.RequestParameterMap.setAttribute
(RequestParameterMap.java:44)
at org.apache.myfaces.context.servlet.AbstractAttributeMap.put(AbstractAttributeMap.java:104)

这是怎么造成的,如何解决?

最佳答案

parameter map是只读的。在 servlet 环境中,此数据结构表示 URL 查询部分中的值(例如 http://foo/bar?queryValue=queryKey)。服务器只能通过发出重定向来更改这些值调用浏览器。

基本 JSF 1.1/1.2 实现中可用的每用户读/写范围为 requestsession .

将数据放入作用域时,应使用文字名称而不是 EL 表达式:

FacesContext.getCurrentInstance()
            .getExternalContext()
            .getRequestMap()
            .put("VastuId", reservationBean.getParentReservationProperty()); 

然后可以使用表达式 #{VastuId}#{requestScope.VastuId} 在 View 中解析该值。

关于jsf - java.lang.UnsupportedOperationException : Cannot set ServletRequest Parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14049856/

相关文章:

java - JSF2 和 RichFaces 错误

java - Wildfly 8 Final 上的 JSF 1.2 - weld-core-jsf 仍在引用 JSF 2.2 API

java - 是否有一种声明性方法来根据请求字段之一验证请求参数?

jsp - 如何在jsp中设置request.getParameter :setProperty

java - 基于 Rest 的 POST Web 服务的跨站点脚本支持

database - Seam 的服务器端分页模式?

ajax - 如何通过 f :ajax when losing focus of second field? 验证两个密码字段

来自ManagedBeans的JSF支持的语言

javascript - 命令按钮双操作 : save and redirect to other page

java - a4j :commandbutton not allowing "<" in rendered