2015-01-20 3 views
0

Мне грозит проблема с передачей объекта на бэк-файл из actionListener в commandLink. У меня есть фасоль MeasureBean и файл xhtml, в котором используется компонент.Pass <p: selectOneListbox var = "ch"> в качестве аргумента <h: commandLink action>

В XHTML у меня есть:

<p:selectOneListbox var="ch"> 
    <f:selectItems value="#{MeasureBean.checkpoints}" var="cp" itemValue="#{cp}" /> 
    <p:column> 
     <h:outputText value="#{ch.name}" /> 
    </p:column> 
    <p:column> 
     <h:commandLink actionListener="#{MeasureBean.onCheckpointRemoved(ch)}"> 
      <h:graphicImage library="#{ctx.theme}" name="images/delete.gif" /> 
      <f:ajax event="click" /> 
     </h:commandLink> 
    </p:column> 
</p:selectOneListbox> 

В боба у меня метод:

public void onCheckpointRemoved(Checkpoint viewCheckpoint) { 
    System.out.println(viewCheckpoint); 
    // TODO 
} 

Проблема заключается в том, что независимо от whethert я использую тег <f:ajax> или нет, параметр viewCheckpoint метода в bean-компоненте всегда равно нулю. Мне нужно передать этот параметр в bean-компонент. Он не должен быть целым объектом, ему разрешено передавать только идентификатор контрольной точки. То, что я пробовал, было:

<h:commandLink actionListener="#{MeasureBean.onCheckpointRemoved(cp)}"> 

(cp вместо ch). Но никакой разницы.

Пожалуйста, помогите,
Матеуш

ответ

0

Вы забыли установить значение <p:selectOneListBox>. Кроме того, вам нужно будет создать конвертер.

Вы можете проверить пример преобразователя в PrimeFaces Showcase

<p:selectOneListbox var="ch" value="#{MeasureBean.checkPointTest}" converter="checkPointConverter"> 
<f:selectItems value="#{MeasureBean.checkpoints}" var="cp" itemValue="#{cp}" /> 
<p:column> 
    <h:outputText value="#{ch.name}" /> 
</p:column> 
<p:column> 
    <h:commandLink actionListener="#{MeasureBean.onCheckpointRemoved(ch)}"> 
     <h:graphicImage library="#{ctx.theme}" name="images/delete.gif" /> 
     <f:ajax event="click" /> 
    </h:commandLink> 
</p:column> 
</p:selectOneListbox> 

Checkpoint checkPointTest; 
// getter/setter.... 
public void onCheckpointRemoved(Checkpoint viewCheckpoint) { 
System.out.println(viewCheckpoint); 
// TODO 
} 
+0

Спасибо Pellizon. Я попробовал ваше предложение, но теперь он не отображает его содержимое. В коробке нет предметов. Я думаю, что тег '' необходим в определении списка. –

+0

Проверьте ответ еще раз! Теперь это немного более точный снимок :) – Pellizon

+0

Спасибо! Точно так же, как я это сделал, не так ли? Единственная разница - это значение и наличие конвертера ... Редактировать: Мне удалось решить проблему с помощью JS «взломать». Я добавил '', на который я установил значение с JS на событие click, а затем вызываю метод bean-компонента. '' Теперь это работает как шарм –

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