当前位置: 首页 > 知识库问答 >
问题:

Primefaces SelectCheckBox菜单空值

钦德佑
2023-03-14

我试图从SelectCheckbox菜单中获取所选值,但在控制台中得到的只是null。它也不适用于selectOneMenu。这是我的jsf表单:

<h:form id="mmaster">
        <p:dataTable
        value="#{devicesBean.devices}" 
        var="dev"
        widgetVar="dt"
        border="1" 
        paginator="true"
        paginatorPosition="top"
        rows="10"
        >
            <f:facet name="header">Devices</f:facet>
                        <p:column headerText="UDN" sortBy="#{dev.deviceUDN}" filterBy="#{dev.deviceUDN}" filterMatchMode="contains" emptyMessage="No Devices Found">
                <h:outputText value="#{dev.deviceUDN}" />
            </p:column>
            <p:column headerText="FriendlyName" sortBy="#{dev.deviceFriendlyName}" filterBy="#{dev.deviceFriendlyName}" filterMatchMode="contains">
                <h:outputText value="#{dev.deviceFriendlyName}" />
            </p:column>
            <p:column headerText="Model" sortBy="#{dev.deviceModel}" filterBy="#{dev.deviceModel}" filterMatchMode="contains">
                <h:outputText value="#{dev.deviceModel}" />
            </p:column>
            <p:column headerText="Manufacturer" sortBy="#{dev.deviceManufacturer}" filterBy="#{dev.deviceManufacturer}" filterMatchMode="contains">
                <h:outputText value="#{dev.deviceManufacturer}" />
            </p:column>
            <p:column headerText="Type" sortBy="#{dev.deviceType}" filterBy="#{dev.deviceType}" filterMatchMode="contains">
                <h:outputText value="#{dev.deviceType}" />
            </p:column>
        <p:column headerText="Actions">
        <p:selectCheckboxMenu value="#{devicesBean.selectAnnotations}">
        <f:selectItems value="#{devicesBean.annotations}" />
        </p:selectCheckboxMenu>           
        </p:column>
        <p:column>
        <p:commandButton value="Annotate" action="#{devicesBean.doSave}" process="@this">
        <f:setPropertyActionListener value="#{dev}" target="#{devicesBean.device}" />
        </p:commandButton> 
        </p:column>
    </p:dataTable>
</h:form>

我想知道bean的范围是否有问题,这是我的托管bean:

@ManagedBean
public class DevicesBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private List<Device> devices;
    private List<String> annotations;
    private List<String> selectAnnotations = new ArrayList<String>();
    private Device device;

    @EJB
    IOntoProcessor iop;
    @EJB
    IDevicesDao idd;

    public DevicesBean() {
    }

    @PostConstruct
    public void init() {
        setDevices(idd.getAllDevices());
        setAnnotations(iop.getAllAnnotations());
    }

    public List<Device> getDevices() {
        return devices;
    }

    public void setDevices(List<Device> devices) {
        this.devices = devices;
    }

    public List<String> getAnnotations() {
        return annotations;
    }

    public void setAnnotations(List<String> annotations) {
        this.annotations = annotations;
    }

    public Device getDevice() {
        return device;
    }

    public void setDevice(Device device) {
        this.device = device;
    }

    public List<String> getSelectAnnotations() {
        return selectAnnotations;
    }

    public void setSelectAnnotations(List<String> selectAnnotations) {
        this.selectAnnotations = selectAnnotations;
    }

    public void doSave() {
        System.out.println(selectAnnotations);
        System.out.println(device);
        selectAnnotations = new ArrayList<String>();
    }

}

共有1个答案

包嘉懿
2023-03-14

您正试图通过带有值注释的按钮提交表单,该按钮已指定为仅处理自身:

这将只处理按钮及其相关表单参数,而不处理表单中的其他元素。

<p:commandButton value="Annotate" action="#{devicesBean.doSave}" process="@this">
    <f:setPropertyActionListener value="#{dev}" target="#{devicesBean.device}" />
</p:commandButton> 

删除进程=“@this”,或将其替换为进程=“@form”

<p:commandButton value="Annotate" action="#{devicesBean.doSave}" process="@form">
    <f:setPropertyActionListener value="#{dev}" target="#{devicesBean.device}" />
</p:commandButton> 

第二,声明您的托管bean范围:@Request estScope@SessionScoped都可以正常工作。

 类似资料:
  • 我使用的菜单项是这样的: 这是上面项目中的一个可绘制tused,比如android:icon=“@drawable/tv”,所以这是电视。xml: 我在bottomNavigationView中使用以下菜单: 一切都很好,但正如你看到的菜单项,它们有图标,但我设置标题为“@null”,所以底部栏现在有图标,图标下面没有文本,但它仍然有空标题的空间,这会导致图标变小,所以我如何设置没有标题,如使标题

  • 菜单管理器允许为您的网站创建自定义菜单,并允许通过您的网站导航。 Step (1) - 在Joomla管理员中单击Menus → Menu Manager ,您将看到以下屏幕 - 您可以看到菜单和菜单项指向网站上的逻辑页面。 Step (2) - 要在您的网站上添加新菜单,请转到Menus → Menu Manager → Add New Menu ,如以下屏幕所示 - 单击“ Add New M

  • 我正在从“导航抽屉activity”模板开发一个安卓应用程序。 当我单击“选项”菜单时,当它应该显示项时,它显示了一个空菜单。 我想这可能是因为文字的颜色,但我检查了一下,对我来说不是这样的。 我的错误在哪里? : : : : 请让我知道,如果您看到任何可能的改进我的代码,无论它们是否与我的问题有关。 谢谢你的帮助!

  • <div class="ui-actionsheet show"> <div class="ui-actionsheet-cnt am-actionsheet-down"> <h4>同时会将我从对方的列表中删除</h4> <button>分享</button> <button class="ui-actionsheet-del">删除

  • 本文介绍:菜单 创建应用程序菜单和上下文菜单 进程: 主进程​ new Menu() 用途:创建新菜单 静态方法 Menu.setApplicationMenu(menu) 用途:设置应用菜单(在macOS中为应用菜单,Windows 和 Linux中为窗口顶部菜单) menu Menu 注意: 这个API必须置于 app 模块的 ready之后. Menu.getApplicationMenu(