我有一个表单可以让我编辑一个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仍将具有旧值,即使我在网页上更改了它。那是为什么?
答案 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>
根据Primefaces Documentation 3.5,组件p:inplace
没有名为value
的属性。
更改someForm
的值时,您是否提交了表单first
?否则,first
的更新值将不会传递给MyController
和MyBean
。 p:inplace
自动提交值,您必须自己使用标准p:inputText
。