<p:inputtext>值在更改模型中未更新</p:inputtext>

时间:2013-09-10 07:16:32

标签: jsf primefaces in-place-editor

我有一个表单可以让我编辑一个bean列表(一次一个),使用我可以在bean之间切换的按钮。

保持简单:

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仍将具有旧值,即使我在网页上更改了它。那是为什么?

2 个答案:

答案 0 :(得分:7)

因为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.

p.s,从value中删除p:inplace属性(p:inplace中没有此类属性)

答案 1 :(得分:1)

让我们给你的组件id

<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的更新值将不会传递给MyControllerMyBeanp:inplace自动提交值,您必须自己使用标准p:inputText