给出<p:selectOneMenu>如下.
<f:metadata>
<f:viewParam name="id" value="#{testManagedBean.id}" converter="javax.faces.Long"/>
</f:metadata>
<p:selectOneMenu value="#{localeBean.language}" onchange="changeLanguage();">
<f:selectItem itemValue="en" itemLabel="English" />
<f:selectItem itemValue="hi" itemLabel="Hindi" />
</p:selectOneMenu>
<p:remoteCommand action="#{testManagedBean.submitAction}"
name="changeLanguage"
process="@this"
update="@none"/>
Run Code Online (Sandbox Code Playgroud)
相应的托管bean:
@ManagedBean
@RequestScoped
public final class TestManagedBean {
private Long id; //Getter and setter.
public TestManagedBean() {}
public String submitAction() {
return FacesContext.getCurrentInstance().getViewRoot().getViewId() + "?faces-redirect=true&includeViewParams=true";
}
}
Run Code Online (Sandbox Code Playgroud)
指示的参数<f:viewParam>是可选的.例如,使用URL访问页面,如下所示.
https://localhost:8181/Project-war/private_resources/Test.jsf
由于id是可选参数,<p:selectOneMenu>因此如果未按如下方式提供,则将空参数附加到URL(更改语言时).
https://localhost:8181/Project-war/private_resources/Test.jsf?id=
这不应该发生.如果未提供空参数,则不应附加空参数,并且URL应与第一个类似.
有没有办法防止空参数被传递到URL时没有传递?
这仅与<f:viewParam>- 指定的转换器相关联javax.faces.Long.
如果删除此转换器,则在未提供参数的情况下,参数不会附加到URL.
虽然完全没有必要指定转换器,但我有如下所示的转换器将id通过URL作为查询字符串参数传递给JPA实体.
@ManagedBean
@RequestScoped
public final class …Run Code Online (Sandbox Code Playgroud)