0

我有一个 PF 的 selectOneRadio 来选择要下载的文件类型。我也有一个命令按钮来调用使用 onclick 属性的下载 servlet。问题是当我选择文件类型并单击按钮时,选择的值当然还没有提交。当我单击下载按钮时,我正在寻找某种方法来获取可用的所选值。

这是我的代码:

<p:selectOneRadio id="sorType" value="#{bean.type}" layout="custom">
    <f:selectItem itemLabel="XML" itemValue="XML" />
    <f:selectItem itemLabel="XLS" itemValue="XLS" />
    <f:selectItem itemLabel="CSV" itemValue="CSV" />
</p:selectOneRadio>

<p:commandButton type="button" ajax="false" onclick="return downloadFile('#{bean.type}');" />
4

2 回答 2

2

如果您想在客户端检查选定的值,则需要widgetVar为您的 定义属性p:selectOneRadio,例如:

<p:selectOneRadio widgetVar="widgetSorType" id="sorType" value="#{bean.type}"
    layout="custom">

    <f:selectItem itemLabel="XML" itemValue="XML" />
    <f:selectItem itemLabel="XLS" itemValue="XLS" />
    <f:selectItem itemLabel="CSV" itemValue="CSV" />
</p:selectOneRadio>

这将使该元素很容易找到 - 然后您可以进一步使用它来检查实际选择了哪个值。我可以看到两个选项如何做到这一点:

function getSelectedTypeVer1() {
    return PF('widgetSorType').getJQ().find(':checked').val() || "";
}

function getSelectedTypeVer2() {
    var inputs = PF('widgetSorType').inputs;

    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].checked) {
            return inputs[i].value;
        }
    }

    return "";
}

选择更适合您的方法 - 如果没有选择任何内容,两者都将返回选定的值或空字符串。所以剩下的就是在你的按钮中调用它,onclick例如:

<p:commandButton type="button" ajax="false"
    onclick="return downloadFile(getSelectedTypeVer1());" />

在 PrimeFaces 5.2 上测试

于 2015-10-02T20:58:56.073 回答
1

@Sva.Mu 分享的解决方案对我不起作用。

我有一个与PrimeFaces Showcase中的最后一个展示非常相似的实现,它引用了自定义布局,其中一些<p:radioButton>指向他们自己的<f:selectItem>

而不是使用PF('widgetName').getJQ().find(':checked').val();我成功地以PF('widgetName').inputs.filter(':checked').val();某种方式合并了这两种方法。

我的 PrimeFaces 版本:6.1

于 2019-06-06T14:56:53.190 回答