Prettyfaces将用户输入作为参数链接

时间:2017-03-21 20:05:19

标签: jsf prettyfaces

我在xhtml中获得了以下代码:

<h:inputText binding="#{year}" />
<h:inputText binding="#{month}" />

<pretty:link value="Create" mappingId="pretty:addEntity">
    <f:param name="year" value="#{year.value}" />
    <f:param name="month" value="#{month.value}" />
    Create Entity
</pretty:link>

此外,我还使用init方法设置了@URLAction(onPostback = false)方法。

我想在这个方法中读取传递的参数。 params不在JSF的请求参数映射中,也不在查询字符串的一部分(com.ocpsoft.pretty.PrettyContext.getCurrentInstance().getRequestQueryString()

如何将这些参数传递给init方法而不将它们绑定到辅助bean?

import com.ocpsoft.pretty.faces.annotation.URLAction;
import com.ocpsoft.pretty.faces.annotation.URLMapping;

import de.financeme.view.menu.NaviCase;

import javax.annotation.ManagedBean;
import javax.faces.bean.ViewScoped;

import lombok.Getter;
import lombok.Setter;

@ManagedBean
@ViewScoped
@URLMapping(id = "addEntity", pattern = "/entity/add", viewId = "/entity/add.xhtml")
public class Bean {

  @Getter
  @Setter
  private String month;

  @Getter
  @Setter
  private int year;

  @URLAction(onPostback = false)
  public void init() {
    // month = null
    // year = 0
  }
}

即使将它们绑定到辅助bean也是如此。我没有调用任何提交功能。因此,它们不会存储到各自的字段中。

有什么问题?我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

您必须将参数绑定到模式中的bean。像这样:

<pretty:link value="Create" mappingId="pretty:addEntity">
    <f:param name="year" value="2017" />
    <f:param name="month" value="12" />
    Create Entity
</pretty:link>

豆子:

@ManagedBean
@ViewScoped
@URLMapping(id = "addEntity", 
    pattern = "/entity/#{bean.year}/#{bean.month}/add", 
    viewId = "/entity/add.xhtml")
public class Bean {

  // ...

}

现在你会得到这样的链接:

/entity/2017/12/add