gpt4 book ai didi

html - primefaces - 可从

works but not visible 拖动

转载 作者:行者123 更新时间:2023-11-28 02:04:51 25 4
gpt4 key购买 nike

我正在为显示在 <p:dataTable> 中的图像列表实现拖放功能。 .该功能运行良好,并且也进行了 ajax 调用。

唯一的问题是当图像从 dataTable 中拖动时,它不显示图像被拖动到​​其他 html 组件上......即它隐藏在其他 html 组件后面。我尝试了 overflow:visible我的数据表和其他组件也是如此,但还没有运气。

我什至删除了页面中的布局。仍然没有运气。这与<p:dataTable>有什么关系吗? ?

使用 primefaces 3.3.1

jsf页面代码:

<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">

<h:head>
<title>Img</title>
</h:head>

<h:body>




<h:form>

<p:scrollPanel>
<p:layout fullPage="true" >

<p:layoutUnit position="north" minSize="100">

</p:layoutUnit>

<p:layoutUnit position="west" maxSize="200" minSize="200">

<p:dataTable var="img"
value="#{orderBean.userMedia.mediaList}"
id="dataTableID">
<p:column>

<p:graphicImage id="imgID" value="#{img.thumbNail.getString('url')}"/>
<p:draggable for="imgID" revert="true"/>

</p:column>



</p:dataTable>

</p:layoutUnit>

<p:layoutUnit position="center">

<p:outputPanel >

<p:panel id="outputPanelID" style="background: red; width: 100%;height: 100%">

</p:panel>

<p:droppable for="outputPanelID">
<p:ajax listener="#{orderBean.onDropImage}"/>
</p:droppable>

</p:outputPanel>

</p:layoutUnit>

<p:layoutUnit position="south" minSize="60">

</p:layoutUnit>

</p:layout>
</p:scrollPanel>


</h:form>

</h:body>

如您在屏幕截图中所见。图片正在被拖动,后端监听器也被调用,但被拖动的图片位于其他 html 组件下方。不知道我错过了什么。

谢谢。

截图: Drag happens but below the other html components

最佳答案

我找到了适合我的解决方案。诀窍是在拖动过程中操纵中心布局单元中的 z-index。
以下代码实现了这一点:

// Enable visibility for drag-and-drop items in Primefaces layout container <p:layoutUnit position="center">
$(".ra-page-pool-items-panel .ui-draggable").draggable({
start: function() {
$(".ui-layout-pane-center").each(function(){
my.centerZIndex = $(this).css("z-index");
$(this).css({"z-index": 0});
});
},

stop: function() {
$(".ui-layout-pane-center").each(function(){
$(this).css({"z-index": my.centerZIndex});
});
}
});

所以这里是全部:jsf(提示:hfx:pageItem 是私有(private)组件):

<h:form id="f">
<p:layout>
<p:layoutUnit id="west" position="west" size="200" header="PAGE POOL" resizable="true" collapsible="true">
<t:div styleClass="ra-page-pool-items-panel">
<t:dataList id="dl" var="ppp" value="#{bean.pagePoolPages}">
<hfx:pageItem id="ppp" model="#{ppp}" />
<p:draggable for="ppp" revert="true" zindex="10" />
</t:dataList>
</t:div>
</p:layoutUnit>

<p:layoutUnit id="center" position="center" header="PAGE LIST">
<t:div id="itemsPanel" styleClass="ra-page-list-items-panel">
<t:dataList id="dl" var="plp" value="#{bean.pageListPages}">
<hfx:pageItem id="plp" model="#{plp}" />
<p:draggable for="plp" revert="true" zindex="10" />
</t:dataList>
</t:div>
</p:layoutUnit>
</p:layout>

还有一个Javascript WebUI初始化函数WebUIUtils.initWebUI(),在页面初始化时调用。

$(function(){WebUIUtils.initWebUI();});

var WebUIUtils = {
centerZIndex: 0,

initWebUI: function() {
var my = this;

// Enable visibility for drag-and-drop items in Primefaces layout container <p:layout>
$(".ui-layout-unit .ui-layout-unit-content").each(function(){
$(this).css({background: "red", overflow: "visible"});
});


// Enable visibility for drag-and-drop items in Primefaces layout container <p:layoutUnit position="center">
$(".ra-page-pool-items-panel .ui-draggable").draggable({ // Do it only for the west items draggables
start: function() {
$(".ui-layout-pane-center").each(function(){
my.centerZIndex = $(this).css("z-index");
$(this).css({"z-index": 0});
});
},

stop: function() {
$(".ui-layout-pane-center").each(function(){
$(this).css({"z-index": my.centerZIndex});
});
}
});
}
};

希望对你有帮助

关于html - primefaces - 可从 <p :dataTable> works but not visible 拖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12131268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com