小编leo*_*tiw的帖子

selectOneMenu ajax事件

我使用可编辑的primefaces selectOneMenu来显示一些值.如果用户从列表中选择项目,则应更新文本区域.但是,如果用户在selectOneMenu中键入内容,则不应更新textarea.

我以为我可以用ajax事件来解决这个问题.但是,我不知道我可以在这里使用哪个事件.我只知道这valueChange件事.还有其他活动,比如onSelectonKeyUp

这是我的代码:

<p:selectOneMenu id="betreff" style="width: 470px !important;"  
            editable="true" value="#{post.aktNachricht.subject}">
            <p:ajax event="valueChange" update="msgtext"
                listener="#{post.subjectSelectionChanged}" />
            <f:selectItems value="#{post.subjectList}" />
</p:selectOneMenu>

<p:inputTextarea style="width:550px;" rows="15" id="msgtext"
        value="#{post.aktNachricht.text}" />
Run Code Online (Sandbox Code Playgroud)

ajax jsf primefaces

30
推荐指数
2
解决办法
11万
查看次数

SelectCheckboxMenu - 禁用"全选"

我有一个包含大量条目的SelectCheckBoxMenu(Primefaces组件).但是,允许用户选择最大值.3项.SelectCheckBoxMenu几乎满足了我的所有要求,唯一的问题是它提供了选择所有项目的可能性,在这种情况下我显然不需要.

是否有可能禁用"全选"选项?我正在使用一个事件检查条目的最​​大值.3.我想我可以为"全选"做同样的事情并且不允许他选择它们,但我不想要"全选"选项.

代码下方:

<p:selectCheckboxMenu value="#{services.titelId}" id="titel" 
            panelStyle="width:160px;" rendered="#{!services.isFirma()}"
            label="#{services.prepareTitel()}" style="width:160px;"
            styleClass="checkbox">
            <f:selectItems value="#{meta.getAkadTitelList()}" />
            <p:ajax event="change" listener="#{services.validateTitel()}"
                update="titel" process="@this" />
            <p:ajax event="toggleSelect" update="titel" process="@this" />
</p:selectCheckboxMenu>
Run Code Online (Sandbox Code Playgroud)

此外,链接到primefaces-展示示例:https://www.primefaces.org/showcase/ui/input/checkboxMenu.xhtml

jsf primefaces jsf-2

7
推荐指数
2
解决办法
1万
查看次数

DataTable with contextMenu,multipleSelection,rowEdit

所以我有一个非常复杂的dataTable.它应该能够编辑单行,选择多行,并显示每行的上下文菜单.单行编辑工作正常,多选工作也是如此,我唯一的问题是每当我尝试在右键单击的行上打开contextMenu时,所选tableItem的值为null.只有当我在行上单击显式(左键单击),然后右键单击上下文菜单才会显示它.这非常不方便,我想在右键单击contextMenu以显示所选的itemValue.

我知道有关于这个问题的其他帖子,但没有真正的解决方案或解决方法,所以我希望你能帮助我.

这是我的代码:

  <p:contextMenu id="schadenTableContextMenu" for="todoSchadenTable"
     style="width: 200px; ">

     <p:submenu id="schadenTableSetAsReadSBM" label="Markieren als"
        styleClass="my-menu">
        <p:menuitem id="schadenTableSetAsReadSBMMI1" value="Gelesen"
           style="width: 167px;" icon="ui-icon-mail-open" ajax="true"
           partialSubmit="true" process="@this"
           action="#{todoLeseHistController.setAlsGelesen()}" update=":mainForm" />

        <p:menuitem id="schadenTableSetAsReadSBMMI2" value="Ungelesen"
           style="width: 167px;" icon="ui-icon-mail-closed" ajax="true"
           partialSubmit="true" process="@this"
           action="#{todoLeseHistController.setAlsUngelesen()}"
           update=":mainForm" />
     </p:submenu>

     <p:menuitem id="schadenTableContextMenuMI3"
        style="width:190px !important; font-size:12px !important;"
        value="In der Applikation öffnen" icon="ui-icon-pencil"
        title="Öffnet den ToDo in der entsprechenden Applikation." ajax="true"
        partialSubmit="true" process="@this"
        action="#{openExternalLinkController.openTodoInExtUrl()}"
        oncomplete="openExternal(xhr, status, args)" update=":msgGrowl" />

  </p:contextMenu>

 -------------------dataTable-----------------
<p:dataTable id="todoSchadenTable" widgetVar="todoSchadenTableW"
     emptyMessage="Keine Schadenmeldungen gefunden." var="currentTableItem"
     value="#{schadenTableController.dataModel}" paginator="true" rows="15"
     filteredValue="#{schadenTableController.filteredTodos}"
     filterEvent="keyup" …
Run Code Online (Sandbox Code Playgroud)

ajax xhtml jsf primefaces

6
推荐指数
1
解决办法
866
查看次数

通过 PrimeFaces p:idleMonitor 超时

我正在尝试通过primefaces 组件idlemonitor处理会话超时。

我这样做是因为我需要让用户知道由于不活动,会话已过期。我需要通过对话框显示此消息,在他关闭对话框后,他应该被重定向到登录页面。他不应该能够像什么都没发生一样单击“后退”并浏览应用程序;如果他点击“后退”,他应该被重定向到 sessionexpired.xhtml 页面。

我将idleMonitor放在logintemplate.xhtml中,因此只有在您登录时它才起作用,无论在哪个页面上,因为登录后我的所有页面都源自loggedintemplate.xhtml

我的logintemplate.xhtml中的代码如下所示:

<p:idleMonitor timeout="6000" onidle="idleDialog.show()" />

<p:dialog header="Timeout" resizable="false" closable="false" 
          widgetVar="idleDialog" modal="true">
    <p:panel styleClass="noborderpanel">
        <p:panelGrid columns="1" styleClass="adressegrid">
            <p:outputLabel value="Session has expired due to inactivity" />
                    <p:commandButton action="#{loginController.timeout()}"
                        value="Ok" />
        </p:panelGrid>
    </p:panel>
</p:dialog>
Run Code Online (Sandbox Code Playgroud)

因此,这段代码的功能主要是检查用户是否在 6 秒内处于非活动状态,如果他处于非活动状态,则会弹出一个无法关闭的对话框,并告诉他会话已过期。

方法loginController.timeout()应该注销用户,使会话无效等。

我的问题是我不知道如何使会话无效,如何注销用户等。如果我使用FacesContext.getCurrentInstance().getExternalContext() .invalidateSession(); 它确实会使会话无效,但我需要更多。例如,如果用户处于非活动状态超过 30 分钟(默认 JavaEE 超时时间),我会收到 nullPointerException。

我想“手动”处理超时,有没有办法禁用默认的 JavaEE 超时?

手动处理超时的最佳方法是什么,而不是这样:

<session-config>
    <session-timeout>20</session-timeout>
</session-config>   
<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/expired.xhtml</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)

jsf primefaces idle-timer

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

jsf ×4

primefaces ×4

ajax ×2

idle-timer ×1

jsf-2 ×1

xhtml ×1