我的问题是,当我编辑单词列表上的字符串时,我的侦听器方法不会接收到新的值。事实上,当我调用event.getNewValue()
方法时,我得到的是旧值。
我错过了什么?
我使用的是JavaServer Faces 2.2、Primefaces 5.0和Spring Framework 4.0.3。
<h:body>
<h:form id="mainEntityForm">
<p:panelGrid columns="1" fullPage="true" id="dashboard">
<f:facet name="header">
<h2>MainEntity Table</h2>
</f:facet>
<p:panel>
<f:facet name="header">
MainEntity List
<p:commandButton value="New MainEntity"
actionListener="#{mainEntityController.createMainEntityDialog}"
styleClass="header-button">
<p:ajax event="dialogReturn" update=":mainEntityForm:mainEntityTable" />
</p:commandButton>
</f:facet>
<p:dataTable id="mainEntityTable" var="mainEntity" value="#{mainEntityController.mainEntities}"
editable="true" editMode="cell" widgetVar="cellMainEntity"
selectionMode="single" selection="#{mainEntityController.selectedMainEntity}"
rowKey="#{mainEntity.id}" tableStyle="width:auto">
<p:ajax event="rowSelect" update=":mainEntityForm:stringGrid :mainEntityForm:entityAGrid :mainEntityForm:entityBGrid" />
<p:ajax event="cellEdit" listener="#{mainEntityController.onEditMainEntity}" update=":mainEntityForm:mainEntityTable" />
<p:column headerText="ID">
<h:outputText value="#{mainEntity.id}" />
</p:column>
<p:column headerText="Name">
<p:cellEditor>
<f:facet name="output">
<h:outputText id="nameOutput" value="#{mainEntity.name}" />
</f:facet>
<f:facet name="input">
<h:inputText id="atyInput" value="#{mainEntity.qty}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Commands">
<p:commandButton title="Remove MainEntity" icon="ui-icon-trash"
actionListener="#{mainEntityController.deleteMainEntity(mainEntity)}"
update=":mainEntityForm:mainEntityTable" />
</p:column>
</p:dataTable>
</p:panel>
<p:panelGrid fullPage="true" id="mainEntityDetail">
<f:facet name="header">
<p:row>
<p:column colspan="4">
<h2>MainEntity Detail</h2>
</p:column>
</p:row>
</f:facet>
<p:row>
<p:column>
<p:panel>
<f:facet name="header">
Word List
<p:commandButton value="New Word"
actionListener="#{mainEntityController.addNewWord()}"
styleClass="header-button"
update=":mainEntityForm:wordGrid">
</p:commandButton>
</f:facet>
<p:dataTable id="wordGrid" var="word"
value="#{mainEntityController.selectedMainEntity.wordList}"
tableStyle="width:auto" editable="true" editMode="cell" widgetVar="cellWord">
<p:ajax event="cellEdit" listener="#{mainEntityController.onEditWord}" />
<p:column headerText="Word">
<p:cellEditor>
<f:facet name="output">
<h:outputText id="wordOutput" value="#{word}" />
</f:facet>
<f:facet name="input">
<h:inputText id="wordInput" value="#{word}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Commands">
<p:commandButton title="Remove Word"
icon="ui-icon-trash"
actionListener="#{mainEntityController.removeWord(word)}"
update=":mainEntityForm:wordGrid" />
</p:column>
</p:dataTable>
</p:panel>
</p:column>
</p:row>
</p:panelGrid>
</p:panelGrid>
</h:form>
</h:body>
@ManagedBean
@SessionScoped
public class MainEntityController {
//...
private MainEntity selectedMainEntity;
public List<MainEntity> mainEntities;
//...
public MainEntity getSelectedMainEntity(){
return selectedMainEntity;
}
public void setSelectedMainEntity(MainEntity mainEntity){
this.selectedMainEntity = mainEntity;
}
//...
public void onEditWord(CellEditEvent event) {
Object oldValue = event.getOldValue();
Object newValue = event.getNewValue();
if(newValue != null && !newValue.equals(oldValue)) {
// THE PROBLEM IS HERE
// I NEVER ACTUALLY REACH THIS CODE
// newValue is always equal to oldValue!
FacesContext context = FacesContext.getCurrentInstance();
String word = context.getApplication().evaluateExpressionGet(context, "#{word}", String.class);
System.out.println(newValue);
System.out.println(word);
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Word Changed", "Old: " + oldValue + ", New:" + newValue);
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
}
@Entity
public class MainEntity {
@Id
private String id;
@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(
name="MainEntity_Word",
joinColumns = @JoinColumn(name = "id", referencedColumnName="id")
)
@Column(name = "word")
private Set<String> wordList;
//...
public void addWord(String word) {
this.wordList.add(word);
}
public void removeWord(String word) {
this.wordList.remove(word);
}
public Set<String> getWordList() {
return wordList;
}
public void setWordList(Set<String> wordList) {
this.wordList = wordList;
}
}
改变
<h:inputText id="wordInput" value="#{word}" />
至
<p:inputText id="wordInput" value="#{word}" />
或
<h:inputText id="wordInput" value="#{word}" >
<p:ajax event="change" process="@this"/>
</h:inputText>
<p:column headerText="Word" >
<p:cellEditor>
<f:facet name="output">
<h:outputText id="wordOutput" value="#{word}" />
</f:facet>
<f:facet name="input">
<h:inputText id="wordInput" value="#{word}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Word" >
<p:cellEditor>
<f:facet name="output">
<h:outputText id="wordOutput" value="#{word}" />
</f:facet>
<f:facet name="input">
<p:inputText id="wordInput" value="#{word}" >
<p:ajax event="change" update="wordOutput" />
</p:inputText>
</f:facet>
</p:cellEditor>
</p:column>
我正计划将一个web应用程序从使用JSF托管bean转换为使用CDI托管bean。我知道我需要做以下工作: 在WEB-INF中添加空beans.xml文件。 将所有JSF@ManagedBean替换为CDI@Named Annotations。 用CDI或OmniFaces作用域注释替换所有JSF作用域注释。 将所有JSF@ManagedProperty替换为CDI@Inject Annotati
我有一个托管bean,它有以下方法: 因此,方法将打开一个对话框,并传递给它两个参数(和)。 然后命令按钮将从调用方法: 但我在行中得到了一个NullPointerException: 所以我在这一行上附加了一个dubugger,我得到了这个: 您可以注意到,变量具有空值,而具有字符串值。
问题内容: 我基于Apache骆驼的应用正在消耗来自IBM队列之一的消息,例如下面是连接工厂的详细信息 消耗和处理并将响应发送到来自消息头的ReplyQueue的骆驼流。 在骆驼标头中,我在JMSReplyQueue下面。您可以看到它是不同的队列管理器,并且该队列管理器来自不同的主机,但是在集群环境中。 队列管理器也在两者之间。喜欢 以下是我在发送消息时遇到的异常。 任何人都可以帮助我将消息发送到
问题内容: 我基于Apache骆驼的应用正在消耗来自IBM队列之一的消息,例如下面是连接工厂的详细信息 消耗和处理并将响应发送到来自消息头的ReplyQueue的骆驼流。 在骆驼标头中,我在JMSReplyQueue下面。您可以看到它是不同的队列管理器,并且该队列管理器来自不同的主机,但是在集群环境中。 队列管理器也在两者之间。喜欢 以下是我在发送消息时遇到的异常。 任何人都可以帮助我将消息发送到
我试图从summernote编辑器中捕获数据,并通过ajax将其发送到php文件。 我正在使用load()传递一些参数集到一个PHP文件,它完美地工作;但我明白了Summernote数据是由HMTL标签组成的,它将需要大量的努力来验证Summernote数据的传输。相反,我决定使用$. ajax()进行另一个ajax调用。每次我发送数据,load()ajax调用工作,但$. ajax()不工作,相
item_ids是一个传入的数组,它本质上是@[1234,1235],只是几个数字。接收此请求的web服务没有为$_POST设置任何内容,但是我发送的JSON确实显示在$HTTP_RAW_POST_DATA中。这是为什么?是我的请求做错了什么,还是更有可能是服务器端出现了问题? 提前感谢!