【问题标题】:Get one of requested hidden input values,where the key is similar获取请求的隐藏输入值之一,其中键相似
【发布时间】:2012-05-25 13:38:41
【问题描述】:

JSF:

<h:form>
    <h:inputHidden id="promo" value="promo-motopair"/>
    <h:commandButton value="#{m.buy}" action="#{showProducts.buy}"/>
</h:form>


<h:form>
    <h:inputHidden id="promo" value="promo-northduck"/>
    <h:commandButton value="#{m.buy}" action="#{showProducts.buy}"/>
</h:form>

Bean,获得点击的id:

String promo = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("promo");

无法得到它,因为id 等于promo,但前面有前缀,看起来像j_idt40:promo

如何处理这种情况?

我需要通过key 获取项目。我想,那个键(在inputhidden 中是id)应该是单一的。我应该只依赖promo 值。

【问题讨论】:

  • @Ravi:在 OP 的情况下,这将导致 invalid HTML。
  • 我看到的主要问题是,我多次使用相同的 id。从另一边我可以使用containsKey()values() 方法,但看起来不优雅恕我直言
  • @BalusC,是的,我没有看到有两个组件具有相同的 ID。
  • @Ravi:整个问题就是关于这个,你怎么会错过这个? ;)

标签: jsf request hidden


【解决方案1】:

不要使用&lt;h:inputHidden&gt;。它不适合您的特定功能要求。只需使用标准 HTML &lt;input type="hidden"&gt;

<h:form>
    <input type="hidden" name="promo" value="promo-motopair"/>
    <h:commandButton value="#{m.buy}" action="#{showProducts.buy}"/>
</h:form>

<h:form>
    <input type="hidden" name="promo" value="promo-northduck"/>
    <h:commandButton value="#{m.buy}" action="#{showProducts.buy}"/>
</h:form>

顺便说一下,它在请求范围的 bean 中,也可以通过 just 获得

@ManagedProperty("#{param.promo}")
private String promo;

无需手动从请求参数映射中抓取。

【讨论】:

  • BalusC,嗨。谢谢你的提示,问题是showProducts bean是SessionScoped
  • 然后使用&lt;f:viewParam name="promo" value="#{showProducts.promo}"/&gt;。另见stackoverflow.com/questions/6377798/…你也可以坚持请求参数图抓取方式:)
  • @BalusC: 从 ActionEvent 获取组件然后 getParent#findComponent("promo") 怎么样?
猜你喜欢
  • 1970-01-01
  • 2021-09-20
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多