我在DataTable中有一个selectOneMenu。当单击DataTable行中的按钮时,我想使用selectOneMenu的选定项获得选定的行。我正在使用HashMap条目集来获取值。最后,我试图用相应的对象更新entry的值。但是,这引发异常javax.el.PropertyNotWritableException:类'java.util.HashMap $ Node'没有可写的属性'value'。
请在下面找到代码。
<p:dataTable value="#{channelListPartialBean.pendingBookingsMap.entrySet()}"
var="bookingsMap">
<p:column headerText="Telephone number">
<h:outputText value="#{bookingsMap.key.telephoneNumber.telephoneNumber}"/>
</p:column>
<p:column headerText="Booking Reference">
<h:outputText value="#{bookingsMap.key.bookingReference}"/>
</p:column>
<p:column headerText="Name">
<p:selectOneMenu id="city" value="#{bookingsMap.value}"
style="width:150px">
<f:selectItem itemLabel="New Patient" itemValue="#{null}" noSelectionOption="true"/>
<f:selectItems value="#{bookingsMap.key.telephoneNumber.patients}" var="patient"
itemValue="#{patient}"
itemLabel="#{patient.firstName} #{patient.lastName}"/>
</p:selectOneMenu>
</p:column>
<p:column headerText="Action">
<p:commandButton value="Start" ajax="false"
action="#{channelListPartialBean.start(bookingsMap)}"/>
</p:column>
</p:dataTable>
还有Bean方法。
public Map<Booking, Patient> getPendingBookingsMap() {
Map<Booking, Patient> bookingPatientMap = pendingBookings
.stream()
.collect(Collectors.toMap(b -> b, c -> new Patient()));
return bookingPatientMap;
}
我在这里感到困惑,因为Map.Entry具有setValue()方法并且可写。提前致谢。