我正在研究拖放功能。我需要将
<p:dataTable>
中的列内容移动到另一列,但不同的行。 (这有效)问题是,我需要将值从列传递到我的支持 bean(和处理数据),这是行不通的。数据不会传递到支持 bean,浏览器中的网络选项卡会发送没有值的请求。所以我认为这是 xhtml 部分的问题。
PrimeFaces 版本:12.0.0(也尝试过 11...) 爪哇:17
我正在尝试在
passingValue
中分配字符串 myController
。
<h:form id="myForm">
<p:dataTable id="table" value="#{myController.myValues}" var="oneValue">
<p:column headerText="Column test">
<p:draggable for="item" revert="true" axis="y"/>
<h:panelGroup id="column1">
<h:outputText id="item" value="value"/>
</h:panelGroup>
<p:droppable for="column1" tolerance="touch">
<p:ajax listener="#{myController.myValues}" process="@this">
<f:setPropertyActionListener target="#{myController.passingValue}" value="foo_string"/>
<f:param name="param" value="another_foo_string"/>
</p:ajax>
</p:droppable>
</p:column>
</:p:dataTable>
</h:form>
myController.java:
@ManagedBean
@SessionScoped
public class MyController implements Serializable {
private String passingValue;
/*
getter and setter
*/
public void handleDrop(DragDropEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
String param = context.getExternalContext().getRequestParameterMap().get("param");
logger.info("handleDrop triggered");
logger.info(event);
logger.info(param);
logger.info(passingValue);
}
}
我分别尝试了两种方法(
f:setPropertyActionListener
和f:param
)我也尝试了<ui:param>
和<p:draggable data="{'name': 'value'}"
和event.getData()
但没有运气。
当前输出为:
handleDrop triggered
*event stuff* //exists
null
null
空应该是
foo_string
和 another_foo_string
我需要以某种方式将
oneValue
(数据表迭代)传递给我的java处理函数,它们两个(拖动对象的旧位置和新位置)
问题是我的
f:param
和 f:attribute
被 p:ajax
包围。
这有效:
<p:droppable for="column1" tolerance="touch">
<f:param name="param" value="foo_string"/>
<f:attribute name="param2" value="another_foo_string"/>
<p:ajax listener="#{myController.handler}" process="@this" />
</p:droppable>
myController.java:
public void handleDrop(DragDropEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
String value = context.getExternalContext().getRequestParameterMap().get("param");
logger.info("Passed value: " + value);
String value2 = (String) event.getComponent().getAttributes().get("param2");
logger.info("Passed value 2: " + value2);
}
输出:
Passed value: another_foo_string
Passed value 2: another_another_foo_string