1

我有一个表单,可以让我编辑 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 仍将具有旧值,即使我在网页上更改它也是如此。这是为什么?

4

2 回答 2

7

这是因为p:inplace editor="true"隐式将值提交给服务器,而<p:inputText没有隐式执行,

您可以通过多种方式解决它

1)添加提交按钮,例如<p:commandButton提交值p:inputText

2) 使用p:ajax event="keyup"or event="change", insidep:inputText

还可以查看展示p:ajax 在支持的组件上启用 ajax 功能。

ps ,value从 中删除属性p:inplace(中没有这样的属性p:inplace

于 2013-09-10T08:17:35.243 回答
1

让我们给你的组件ids:

<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 文档 3.5,该组件p:inplace没有名为value.

  2. someForm更改 的值时是否提交表单first?否则,更新后的值first不会传递给MyControllerand MyBeanp:inplace自动提交值,如果你使用标准,你必须自己做p:inputText

于 2013-09-10T08:18:51.173 回答