2013-09-10 2 views
1

У меня есть форма, которая позволяет мне редактировать список фасоли (по одному за раз), используя кнопки, которые я могу переключаться между бобами.<p:inputText> Значение не обновляется в модели при изменении

Держа это просто:

public class MyBean { 
    private String text; 
} 

public class MyController { 
    private List<MyBean> availableBeans = new ArrayList<MyBean>(); // has five MyBeans with random text 
    private MyBean selectedBean; // initialized with first element of list 

    private int index = 0; 

    public void nextBean() { index++; } 
    public void previousBean() { index--; } 

    private void refreshBean() { selectedBean = availableBeans.get(index); } 
} 

Для HTML части у меня есть что-то вроде

<h:form id="someForm"> 
    <!-- stuff --> 

    <p:inputText value="#{myController.selectedBean.text}" /> 

    <p:inplace editor="true" label="#{myController.selectedBean.text}" > 
     <p:inputText value="#{myController.selectedBean.text}" /> 
    </p:inplace> 

    <!-- more stuff--> 
</h:form> 

Если изменить текст внутри INPLACE тега, переменная в myBean будет обновляться только в порядке, но если я использую только inputText, bean будет по-прежнему иметь старое значение, даже если я изменю его на веб-странице. Почему это?

+0

Пожалуйста, не используйте редактор вопросов переполнения стека в качестве редактора кода. Измените (и проверьте!) Его в истинном редакторе, а затем не скопируйте код копии. – BalusC

ответ

6

Сво потому что p:inplace editor="true" неявно подаст значение на сервер в то время как <p:inputText не делает это неявно,

Вы можете решить несколько способов

1) добавить кнопку отправки, как <p:commandButton представить значение из p:inputText

2) использовать p:ajax event="keyup" или event="change", внутри p:inputText

также взглянуть на витрины p:ajax enables ajax features on supported components.

пс, удалить атрибут value из p:inplace (нет такого атрибута в p:inplace)

+1

Большое спасибо, событие ajax сделало трюк. Я перепутал значение и метку, набрав вопрос, к счастью, у меня это было правильно в моем фактическом коде. – Shishigami

+0

Ваша ссылка «p: ajax позволяет поведение ajax для любого компонента JSF» относится к не существующей странице. пожалуйста, измените его – adranale

+0

@adranale, обновлено ... – Daniel

1

Позволяет дать ваши компоненты id S:

<h:form id="someForm"> 
    <p:inputText id="first" value="#{myController.selectedBean.text}" /> 
    <p:inplace id="second" editor="true" value="#{myController.selectedBean.text}"> 
    <p:inputText id="third" value="#{myController.selectedBean.text}" /> 
    </p:inplace> 
</h:form> 
  1. В соответствии с Primefaces Documentation 3.5 компонент p:inplace не имеет атрибута value.

  2. Вы отправляете форму someForm при изменении значения first? В противном случае обновленные значения от first не будут переданы в MyController и MyBean. p:inplace автоматически отправляет значения, в соответствии с которыми вы должны сделать это самостоятельно, вы используете стандарт p:inputText.

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