2013-05-05 4 views
0

Я хочу сохранить выбранное значение первого атрибута managedabean «refCont» во втором атрибуте управляемого компонента, а затем отправлю. но значение покажет, что после второго выбора, зная, что отображаемое значение является первым, выбранным в первый раз. Я не знаю, что ради@ManagedProperty initialization

.xhtml

<h:outputText value="* Contact" /> 
<h:selectOneMenu id="contact" value="#{reclamationMB.refCont}" onchange="lazyload()"> 
    <c:set value="#{reclamationMB.refCont}" target="#{contactMB}" property="refContt" /> 
    <f:ajax listener="#{contactMB.affichReclContact}" /> 
    <f:selectItem itemLabel="Select One" noSelectionOption="true" itemValue="---" /> 
    <f:selectItems value="#{contactMB.contactsClient}" noSelectionValue="" var="contact" itemValue="#{contact.refCont}" itemLabel="#{contact.nomCont}" /> 
    <f:selectItems itemLabel="Autre" itemValue=""></f:selectItems> 
</h:selectOneMenu> 

первый ManagedBean:

@RequestScoped 
    public class ReclamationMB extends AbstractMB implements Serializable { 
     private int refCont;//ref contact recuperé pour la creation de la reclamation 
     ..... 
//getter and setter 

Второй Mnaged боб

@RequestScoped 
    public class ContactMB extends AbstractMB implements Serializable { 
    @ManagedProperty("#{reclamationMB.refCont}") 
      private int refContt; 
      ..... 
    //getter an setter 
    public void affichReclContact(AjaxBehaviorEvent event){ 
      contact=service.AffichContact(refContt); 
      setContact(contact); 
    } 

ответ

0

Проблема заключается в том, что JSTL-х <c:set> это время вид сборки обработчик тегов, а не просмотр re nder time Компонент пользовательского интерфейса, поэтому ваша проблема является классической: когда вы ожидаете, что она установит значение, ее больше нет в дереве компонентов. Более того, он работает, когда не было тега <h:selectOneMenu>.

Конечно, если <h:selectOneMenu> реализованы ActionSource, так же, как <h:commandButton>, вы могли бы вложенный JSF <f:setPropertyActionListener> по причине установки свойства фасоли с необходимыми значениями, как и в <f:setPropertyActionListener target="#{contactMB.refContt}" value="#{reclamationMB.refCont}">. Но вы не можете этого сделать.

В принципе вы можете сделать две вещи:

  1. Используйте PrimeFaces <p:remoteCommand> тег, который может содержать вышеупомянутая слушатель действия, чтобы установить нужное значение, и назвать его в onchange методом. Здесь есть куча таких примеров на Stack Overflow и в отличной документации PrimeFaces.
  2. Используйте инъекцию боба, а не только впрыскивание свойств боба. В первом случае выражение reclamationMB.getRefCont() всегда дает правильный результат в держателе, при условии, что reclamationMB является переменной для удержания инжектируемого компонента по @ManagedProperty.
+0

спасибо за ваше объяснение, но я не могу сделать первый, потому что я использую уже '', который я вызываю в этом , я думаю, что не могу назвать два ' p: remoteCommand> 'в том же onchange. Второе: у меня есть ошибка, что 'property =" reclamationMB.refCont "' не найден, когда я использую "bean injection" '' – ftning

+0

Firast, вы можете позвонить нескольким удаленным функциям, но это не нужно и может быть слишком дорогостоящим. Тем не менее, вы можете * добавить/nest ' к этому' '*. Что касается второго, '' запускается только один раз, поэтому вы не можете использовать его для решения своей проблемы>. Скорее, * введи весь bean-компонент *, чтобы выполнить задание: '@ManagedProperty (" # {reclamationMB} ") private ReclamationMB reclamationMB;' с геттерами/сеттерами, и в этом случае вам не нужно ничего другого, в случае, если введенный bean-компонент инициализируется * как раз вовремя *. – skuntsel

+0

хорошо, он работает, но во втором выборе. Я добавляю весь боб, и я добавляю ftning