2012-05-25 2 views
1

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. Я полагаю, что ключ (который равен id в inputhidden) должен быть одинарным. Я должен полагаться только на значение promo.

+0

@Ravi: это в случае OP приведет к [недопустимому] (http://validator.w3.org) HTML. – BalusC

+0

Это не помогает – sergionni

+0

Основная проблема здесь, что я вижу, что я использую один и тот же идентификатор несколько раз. С другой стороны я могу использовать метод 'containsKey()' или 'values ​​()', но выглядит не изящно. IMHO – sergionni

ответ

3

Не использовать <h:inputHidden>. Это не подходит для вашего конкретного функционального требования. Просто используйте стандартный HTML <input type="hidden">.

<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> 

Это в запросе областью действия боб, кстати, также доступны, просто

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

без необходимости вручную захватить его с карты параметров запроса.

+0

BalusC, привет. Спасибо за подсказку, и проблема заключается в том, что showProducts bean is 'SessionScoped' – sergionni

+1

Используйте' 'then. См. Также http://stackoverflow.com/questions/6377798/what-can-fmetadata-and-fviewparam-be-used-for. Вы также можете просто придерживаться подхода к захвату карты параметров запроса. – BalusC

+0

@BalusC: как насчет получения компонент из ActionEvent, а затем getParent # findComponent («promo»)? – Ravi

Смежные вопросы