Как передать параметр из commandLink в outputPanel для настройки содержимого outputPanel - PullRequest
0 голосов
/ 22 июня 2011

Я использую следующий код для генерации outputPanel по требованию пользователя. Я хочу настроить содержание outputPanel в соответствии с ответом пользователя. Таким образом, мне нужно передать параметр от commandLink до ouputPanel. Как я могу это сделать?

<h:form>     

<p:commandLink value="Load" onclick="lazyload()" />  

<p:remoteCommand name="lazyload" update="lazypanel">  
    <f:setPropertyActionListener value="#{true}" target="#{requestScope.shouldRender}"/>  
</p:remoteCommand>                          

<p:outputPanel id="lazypanel">  
    <h:outputText value="This part is lazily loaded" rendered="#requestScope.shouldRender}"/>  
</p:outputPanel>             

</h:form>  

1 Ответ

0 голосов
/ 23 июня 2011

Вы можете использовать отрендеренное свойство, как сейчас.Вопрос в том, как вы хотите настроить его.Есть немало способов в зависимости от ситуации.Вы можете сделать индивидуальный набор значений, которые отображаются только тогда, когда их значение равно true.

т.е.

  <p:outputPanel rendered="#{bean.someBoolCheckCaseOne}" />
  <p:outputPanel rendered="#{bean.someBoolCheckCaseTwo}" />
  ...
  <p:outputPanel rendered="#{bean.someBoolCheckCaseThree}" />

или, если вы получаете гораздо более широкий диапазон, вы можете напрямую внедрить HTML в панель с помощью

  <p:outputPanel ...>
    <h:outputPanel escape="false" value="#{bean.htmlWithoutEscapes}" />
  </p:outputPanel>

Для передачи параметров

  <p:commandLink actionListener="#{bean.onClick}"...>
    <f:attribute name="someParam" value="#{someValue}" /> <!-- you can get this from the component attribute map -->
  </p:commandLink>

//Managed Bean
  public void onClick(ActionEvent evt)
  {
    Object param = evt.getComponent().getAttributes().get("someParam");
  }

На самом деле я думаю, что это довольно тривиально.Очевидно, вам нужно определить вход и выход.Я бы порекомендовал использовать bean-компонент поверх requestScope просто потому, что PrimeFaces 2.2.1 имеет нулевой указатель в конвертере для текста, который был исправлен всего несколько недель назад.Я не уверен, почему вы после удаленной команды.Его использование довольно специфично, и если вам не нужна эта специфика (я сомневаюсь, что вы это делаете), это просто добавляет некоторую сложность и места для того, чтобы что-то пошло не так.

Если вы хотите сделать все это в requestScope, вы можете сделать это тоже ... Я просто не рекомендовал бы это.

Я использую это для таких вещей, как строка поиска и т. Д ...

<h:inputText value="#{requestScope.searchString}"  style="width:95%;"/>
<p:commandButton value="Search" actionListener="#{inventoryBean.wardrobe.searchViaParameters}" update="inventoryWardrobe:searchForm">
  <f:attribute name="searchString" value="#{requestScope.searchString}"/>
</p:commandButton>

Надеюсь, это поможет, это мощный компонент.

...