我的大部分页面导航都使用 get 请求,现在我有一个表单,其中的参数应该包含在查询字符串参数中,使用f:param
insideh:commandButton
或检查属性以includeViewParams
供使用UIViewParameter
。
我不想使用includeViewParams
,因为这将包括所有视图定义的参数,我只想使用作为命令组件的子级提供的参数。
<h:form>
<p:inputText value="#{bean.value1}"/>
<p:selectOneMenu value="#{bean.value2}"/>
<p:commandButton action="#{utilBean.performActionParams(outcome)}">
<f:param name="key1" value="#{bean.value1}"/>
<o:param name="key1" value="#{bean.value2}" converter="#{bean.converter}/>
</p:commandButton>
</h:form>
public String performActionParams(final String outcome)
{
final UriBuilder uriBuilder = UriBuilder.fromPath(outcome);
final FacesContext context = FacesContext.getCurrentInstance();
final UIComponent component = UIComponent.getCurrentComponent(context);
for (final UIComponent child : component.getChildren())
if (child instanceof UIParameter)
{
final UIParameter param = (UIParameter) child;
if (!param.isDisable() && !StringUtils.isBlank(param.getName()))
{
final Object value = param.getValue();
if (value != null)
uriBuilder.queryParam(param.getName(), value);
}
}
return uriBuilder.build().toString();
}
这个逻辑并不是很复杂,但它看起来很多余,因为它似乎与 in 中的逻辑h:link
相同h:button
。
那么有人知道这个逻辑在哪里实现吗?