PrimeFaces ajax 不会将参数值传递给支持 bean

问题描述 投票:0回答:1

我正在研究拖放功能。我需要将

<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处理函数,它们两个(拖动对象的旧位置和新位置)

jsf primefaces
1个回答
0
投票

问题是我的

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
© www.soinside.com 2019 - 2024. All rights reserved.