JSF将<f:param>添加到datatable </f:param>

时间:2011-12-19 07:05:43

标签: java jsf

ok我试图在这里使用f:param将requestid作为参数传递给评论页面。目前正在执行此操作,如下所示,但managedproperty无法正常工作,因为我需要从review.xhtml再次发布。我怎样才能添加这个f:param标签,然后在bean中处理它?<​​/ p>

    <p:dataTable style="width:50px;" id="requestList" value="#
            {requestBean.requestsList}" var="requestClass">  
            <p:column>  
                <f:facet name="header">  
                    <h:outputText value="ID" />  
                </f:facet> 
                 <a href="review.xhtml?id=#{requestClass.requestID}">
                    <h:outputText value="#{requestClass.requestID}" />  
                 </a>

            </p:column>  

            <p:column>  
                <f:facet name="header">  
                    <h:outputText value="Status" />  
                </f:facet>  
                <h:outputText value="#{requestClass.requestStatus}" />  
            </p:column>  

              <p:column>  
                <f:facet name="header">  
                    <h:outputText value="Details" />  
                </f:facet>  
                  <h:outputText value="#{requestClass.requestTitle}" />  
            </p:column>
        </p:dataTable>  

谢谢

4 个答案:

答案 0 :(得分:2)

我认为您可以尝试以下方法:

。将您的bean保存为RequestScoped,并在review.xhtml中的表单中放入一个隐藏字段以包含id:

<h:form>
   ...
   <h:inputHidden id="id" value="#{mrBean.id}" />
   ...
</h:form>

@ManagedBean(name = "mrBean")
@RequestScoped
public class MrBean {
   @ManagedProperty(value = "#{param.id}")
   private String id;
}

。将您的bean保存为RequestScoped,并将<f:param>放在review.xhtml中的commandButton中:

<h:form>
   ...
   <h:commandButton value="Submit">
      <f:param name="id" value="#{param.id)" />
   </h:commandButton>
</h:form>

。将您的bean更改为ViewScoped

@ManagedBean(name = "mrBean")
@ViewScoped
public class MrBean {
   private String id;

   @PostConstruct
   public void prepareReview() {
       HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
       id = request.getParameter("id");
   }
}

答案 1 :(得分:1)

JSF

<p:column>  
    <f:facet name="header">  
        <h:outputText value="ID" />  
    </f:facet>
    <h:outputLink value="review.xhtml">
        <f:param name="myId" value="#{requestClass.requestID}" />
            <h:outputText value="#{requestClass.requestID}" />
    </h:outputLink>
</p:column> 

BEAN

Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
int requestID = Integer.parseInt(params.get("myId"));

答案 2 :(得分:0)

表没有f:params。但是它们可以有f:属性。

答案 3 :(得分:0)

在Edze的答案中使用h:outputLink或h:链接嵌套的f:param。

但是在review.xhtml上,使用名称为“myId”的f:viewParam和绑定到review.xhtml的支持bean的值。

f:viewParam是一个有状态组件,它将记住后续请求之间的值,即使您的支持bean是请求范围的。另一个优点是使用f:viewParam可以使用普通的JSF验证器。

Google为BalusC的“JSF 2中的沟通”文章进行了一些考试。