小编roo*_*kit的帖子

Primefaces DataTable的列特定上下文菜单

如何在Primefaces数据表中为每列定义上下文菜单?放在<p:contextMenu>里面<p:column>不能正常工作.我希望上下文菜单不同,具体取决于右键单击的列用户.

这不起作用(为所有列创建的上下文菜单相同):

<p:dataTable value="#{values}" var="value" selectionMode="single" selection="#{selectedValue}" id="table">
    <p:column headerText="Col 1">
        <h:outputText value="#{value.balance}">
            <f:convertNumber type="currency"></f:convertNumber>
        </h:outputText>
        <p:contextMenu>
            <p:menuitem value="Report"></p:menuitem>
            <p:menuitem value="Change"></p:menuitem>
        </p:contextMenu>
    </p:column>
    <p:column headerText="col 2" >
        <h:outputText value="#{value.balance2}">
            <f:convertNumber type="currency"></f:convertNumber>
        </h:outputText>
    <p:contextMenu>
        <p:menuitem value="Something else"></p:menuitem>
    </p:contextMenu>
    </p:column>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)

如何通过使用PF组件,扩展PF组件或添加自定义JavaScript在Primefaces dataTable中添加特定于列的上下文菜单?

datatable jsf contextmenu primefaces jsf-2

8
推荐指数
2
解决办法
6937
查看次数

如何更新Primefaces数据表中的特定行

Primefaces 3.5,Mojarra 2.1.14.这是我的PF数据表,它包含一个名为'automatic'的不可编辑的布尔列,以及可编辑的'label'列:

<p:dataTable value="#{bean.contents}" paginator="true" var="row" 
  editable="true" editMode="cell" rows="25" rowsPerPageTemplate="10,25,50" id="list">
    <p:column>
        <f:facet name="header"><h:outputText value="header1" /></f:facet>
        <p:selectBooleanCheckbox value="#{row.automatic}" disabled="true" id="isAutomatic"></p:selectBooleanCheckbox>
    </p:column>
    <p:column>
        <f:facet name="header"><h:outputText value="header2" /></f:facet>
        <p:cellEditor>
            <f:facet name="output">
                <h:outputText value="#{row.label}"></h:outputText>
            </f:facet>
            <f:facet name="input">
                <p:inputText value="#{row.label}"></p:inputText>
            </f:facet>
        </p:cellEditor>
    </p:column>
    <p:ajax event="cellEdit" process="@this" listener="#{myBean.onEditLabel}" update="isAutomatic"/>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)

单元格编辑事件监听器:

public void onEditLabel(CellEditEvent event) {
    Object oldValue = event.getOldValue();
    Object newValue = event.getNewValue();

    if(newValue != null && !newValue.equals(oldValue)) {
        DataTable s = (DataTable) event.getSource();
        MyEntity d = (MyEntity) s.getRowData();
        try {
            d.setAutomatic(false);
            myDAO.save(d); …
Run Code Online (Sandbox Code Playgroud)

primefaces

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

如何强制 HotSpot JVM 覆盖堆转储文件?

我正在 OOM 上转储堆(OpenJDK 7)

 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/jvm.hprof
Run Code Online (Sandbox Code Playgroud)

启动选择我的虚拟机。我的磁盘空间不足,无法存储多个转储(堆大小为 6g)。有没有办法强制 JVM 覆盖转储文件?目前,它会抱怨“文件存在”并保持现有转储完好无损。我已阅读 Sun 的文档,但似乎没有任何强制覆盖的选项

jvm jvm-hotspot

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

JSF延迟加载组件值

考虑一个简单的h:outputText组件:

<h:outputText value="#{myBean.myValue}"/>
Run Code Online (Sandbox Code Playgroud)

如何在页面渲染后延迟加载该值,并在完成此操作时显示自定义'ajax loading'图标而不是值?

我在我的项目中使用PrimeFaces 3.5,因此欢迎任何特定于PF的实现.

jsf primefaces jsf-2

5
推荐指数
1
解决办法
7615
查看次数

如何在PrimeFaces对话框中删除滚动条?

我的webapp中有ajax加载模式对话框:

<p:dialog widgetVar="statusDialog" modal="true" draggable="false" minimizable="false" appendToBody="true"
    closable="false" header="Processing..." resizable="false" maximizable="false" style="overflow:hidden !important; overflow-x: hidden !important; width:auto;">  
     <p:graphicImage library="assets" name="ajax-loader.gif" style="overflow:hidden !important; overflow-x: hidden !important;"></p:graphicImage> 
</p:dialog>
<p:ajaxStatus onstart="statusDialog.show();" onsuccess="statusDialog.hide();"/>  
Run Code Online (Sandbox Code Playgroud)

无论什么CSS样式(我尝试过各种溢出/溢出-x等组合)我用它仍然显示水平(垂直隐藏,没有问题)滚动条.我还玩过appendToBody属性.

我需要禁用水平滚动条.

编辑:这是PrimeFaces呈现的HTML

<div id="j_idt18" class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-shadow ui-overlay-hidden" style="overflow: hidden; width: auto; height: auto; left: 832px; top: 210px; visibility: hidden; z-index: 1003; display: block;" role="dialog" aria-labelledby="j_idt18_title" aria-hidden="true" aria-live="off">
<div class="ui-dialog-titlebar ui-widget-header ui-helper-clearfix ui-corner-top">
<span id="j_idt18_title" class="ui-dialog-title">Processing...</span>
</div>
<div class="ui-dialog-content ui-widget-content" style="height: auto;"><img id="j_idt19" src="/webapp/do/javax.faces.resource/ajax-loader.gif?ln=assets" alt="">
</div>
</div>
Run Code Online (Sandbox Code Playgroud)

我已经能够通过覆盖我自己的样式表中的默认对话框CSS来摆脱滚动条: …

css primefaces

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

如何显示动态Primefaces组件的ajaxstatus

我注意到几乎所有将'动态'属性设置为'true'的PF组件只会在短暂延迟后显示(这是可以理解的),并且也不会触发ajax启动/停止事件.

这是我(完全正常工作)的Ajax状态组件,为简洁省略了实际的对话框内容:

<p:ajaxStatus onstart="statusDialog.show();" onsuccess="statusDialog.hide();" onerror="errorDialog.show();"/> 
Run Code Online (Sandbox Code Playgroud)

这是一个动态加载的对话框.它需要从支持bean获取数据:

<p:dialog modal="true" widgetVar="confDialog" position="center" id="confD" dynamic="true">
<p:panelGrid>
<p:row>
    <p:column>
        <h:outputText value="Date"></h:outputText>
    </p:column>
    <p:column>
        <h:outputText value="#{myBean.currentDate}">
            <f:convertDateTime locale="#{myBean.currentLanguage}" type="both" dateStyle="full" timeStyle="full" timeZone="#{myBean.currentTimeZone}"></f:convertDateTime>
        </h:outputText>
    </p:column>
</p:row>
</p:panelGrid>
<p:commandButton value="Close" type="button" onclick="confDialog.hide();">
</p:commandButton>
</p:dialog>
Run Code Online (Sandbox Code Playgroud)

执行某些操作并显示动态加载的确认对话框的命令按钮:

<p:commandButton value="Do it" type="submit" ajax="true" process="@form"
                action="#{bean.processForm}"
                oncomplete="if(!args.validationFailed){confDialog.show();}"
                update="confD @form"/>
Run Code Online (Sandbox Code Playgroud)

当命令按钮将数据提交给支持bean并获取数据时,将显示Ajax状态对话框.然后ajax状态对话框消失,延迟1-2秒,并显示确认对话框.

动态加载的选项卡也是如此(在PF tabView组件中).

为什么在动态组件加载期间不显示我的ajax状态对话框?我怎么展示它?

编辑:

感谢@partlov通过在动态加载的对话框中添加JQ ajax启动/停止处理程序,我找到了一个没有覆盖PF函数的解决方案:

jQuery(document).ready(function() {
 confDialog.getJQ().ajaxStart(function(){statusDialog.show()});
 confDialog.getJQ().ajaxStop(function(){statusDialog.hide()});
});
Run Code Online (Sandbox Code Playgroud)

ajax jsf primefaces

3
推荐指数
1
解决办法
8199
查看次数

如何实现Primefaces progressBar的更新处理程序?

我有一个常规的Ajax PF progressBar:

        <p:progressBar value="#{myTask.progress}" labelTemplate="{value}%" ajax="true" widgetVar="progress">
            <p:ajax event="complete" oncomplete="progress.cancel();"></p:ajax>
        </p:progressBar>
Run Code Online (Sandbox Code Playgroud)

每当progressBar更新它的值时,如何运行我的JavaScript代码?

jsf primefaces jsf-2

3
推荐指数
1
解决办法
3400
查看次数

CSS类特异性顺序

我已经定义了自己的CSS类:

.my-ui-table td {
border-width: 1px;
border: 0;
padding: 5px 10px;
border-style: hidden;
border-color: inherit;
}
Run Code Online (Sandbox Code Playgroud)

默认的PrimeFaces css定义了自己应用于的类:

.ui-panelgrid td {
border-width: 1px;
border-style: solid;
border-color: inherit;
padding: 4px 10px;
}
Run Code Online (Sandbox Code Playgroud)

这两个类都应用于表:

<table class="ui-panelgrid ui-widget my-ui-table" role="grid">...</table>
Run Code Online (Sandbox Code Playgroud)

当Chrome呈现所述表时,ui-panelgrid类的border-style优先于my-ui-table类中定义的border-style.我一直在阅读CSS特异性,它的两种类定义的特殊性是相同的,所以在class =""属性中最后指定的那个应该获胜.为什么不发生这种情况?

编辑:HTML头标记:

<head>
 <link type="text/css" rel="stylesheet" href="/webapp/do/javax.faces.resource/my.css?ln=css">
 <link type="text/css" rel="stylesheet" href="/webapp/do/javax.faces.resource/primefaces.css?ln=primefaces">
</head>
Run Code Online (Sandbox Code Playgroud)

.

css primefaces

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

Android系统叠加层未在我的应用外显示

我需要在任何正在运行的应用程序之上显示系统覆盖窗口.它工作正常,但只有当我的应用程序的活动在前台时.这是我使用的代码:

params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 
                    WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |
                    WindowManager.LayoutParams.FLAG_DIM_BEHIND |
                    WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | 
                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
                    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD,
                    PixelFormat.TRANSLUCENT);

params.gravity = Gravity.CENTER | Gravity.TOP;
params.dimAmount = 0.3f;
wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);

    mainAlertView = View.inflate(ctx, R.layout.system_alert_view, null);

    wm.addView(mainAlertView, params);
Run Code Online (Sandbox Code Playgroud)

添加到WindowManager的视图包含空的LinearLayout,我在运行时添加了子视图:

    mainAlertLayout.addView(childView);
Run Code Online (Sandbox Code Playgroud)

清单xml已SYSTEM_ALERT_WINDOW定义权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Run Code Online (Sandbox Code Playgroud)

当我的活动在前台运行时,这一切都很有效.只要我切换到任何其他应用程序或主屏幕,就不会显示叠加层.我调试了代码,它确实在运行wm.addView(),它没有抛出任何异常.我还玩过LayoutParams标志(删除了KEEP_SCREEN_ON和相关的等),但没有任何区别.

Android 4.4.2 fwiw

android android-layout layoutparams

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