Javascript 更新某些Primefaces图元素
从两天开始,我一直在努力解决primefaces图实现中遇到的一个问题。 我想在“mouseover”图元素上,突出显示与该元素连接的其他元素。 我让它工作,但只有当我更新元素时更新整个图表/表单。 这种方法有两个问题。 首先,随着mouseenter和其他东西上的所有绑定上的mouseover的不断更新,会被重置,所以尽管我刚刚输入,但我一直都会触发事件。还有80%的时间,我没有捕捉到mouseleave/hover-leave事件,因为不断的呼叫。 此外,我无法再滚动图表,因为鼠标上的持续更新会重置滚动。;-) 所以我试图只更新我在mouseover上实际更改的图表元素,但我找不到一种适合我的方法 我尝试通过primefaces RequestContect.update更新元素 我使用了Id上的所有变体,如: 1-0201 图-1-0201 图:图1-0201 我尝试了从primefaces执行的javascript查询。我有一个用户界面无法解决的错误之一。尽管相同的查询在xhtml上工作。我也无法找出那个错误。虽然我不认为这会有帮助,因为同样的代码在html文件中执行时也不起作用 我尝试将连接保存在一个图表元素值中,然后通过元素上的隐藏输入访问该值。我在javascript中获得了连接元素的ID,但我也无法通过javascript更新这些元素。“inside”(剩余的注释代码)是我在存储连接的元素变量上引用的隐藏输入的变量) 我在javascript中获得了列表和单个连接ID,但无法更新元素 我在javascript方面没有那么丰富的经验。几天前我第一次用它 那么,如何在不重新加载孔图的情况下更新primefaces图中某些元素的样式呢? 必须有一个非常简单的方法来做这件事,或者有一个简单的方法来修复我的方法,我只是看不到。 如果我像我说的那样更新整个图表是可行的,但是我不能在鼠标上这样做,原因很明显 我将primefaces 6.0与ApacheTomcat 8.5一起使用 带有ID的设置的图片: 事件的javascript日志图片: 我的xhtml文件:Javascript 更新某些Primefaces图元素,javascript,jsf,primefaces,Javascript,Jsf,Primefaces,从两天开始,我一直在努力解决primefaces图实现中遇到的一个问题。 我想在“mouseover”图元素上,突出显示与该元素连接的其他元素。 我让它工作,但只有当我更新元素时更新整个图表/表单。 这种方法有两个问题。 首先,随着mouseenter和其他东西上的所有绑定上的mouseover的不断更新,会被重置,所以尽管我刚刚输入,但我一直都会触发事件。还有80%的时间,我没有捕捉到mouseleave/hover-leave事件,因为不断的呼叫。 此外,我无法再滚动图表,因为鼠标上的持续更
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<p:panelGrid columns="2" styleClass="borderless">
<h:graphicImage name="images/logo.gif" />
<h:outputLabel styleClass="h1" value="Diagram Viewer" />
</p:panelGrid>
<f:metadata>
<f:viewAction action="#{dataManager.onLoad}" />
</f:metadata>
</h:head>
<h:body>
<h:form id="tabMenuForm">
<p:menubar styleClass=".ui-menu .ui-menuitem-link"
model="#{dataManager.menuModel}" />
</h:form>
<h:form id="diagramForm">
<p:dialog widgetVar="statusDialog" modal="true" draggable="false"
closable="false" resizable="false" showHeader="false">
<p:graphicImage value="#{resource['images/defaultLoader.gif']}" />
</p:dialog>
<p:tooltip />
<p:diagram id="diagram" value="#{dataManager.model}"
styleClass="borderless" style="#{dataManager.diagramStyle}" var="el">
<f:facet name="element" id="diagramElement" widgetVar="element">
<h:outputLabel>
<p:commandLink
actionListener="#{tooltipManager.onElementClickedTwo()}"
styleClass="commandRemover">
<f:param name="selected" value="#{el.id}" />
<div class="elID">
<h:outputText value="#{el.id}" />
</div>
<div class="elName">
<h:outputText value="#{el.name}" sytleCLass="elName" />
</div>
</p:commandLink>
</h:outputLabel>
<!-- <h:outputText value="#{el.role}" style="display: inline; align-items: right; margin-top:0em;"/> -->
</f:facet>
</p:diagram>
<p:remoteCommand name="elementMouseOver"
actionListener="#{dataManager.onElementMouseOver}" />
<p:remoteCommand name="elementMouseOut"
actionListener="#{dataManager.onElementMouseOut}" />
<h:inputHidden id="someId" value="#{dataManager.selectedId}" />
<script type='text/javascript'>
$('.ui-diagram-element').hover(function(ev) {
var id = $(this).attr('id');
console.log(ev);
var id = $(this).attr('id');
//var inputs = $(this).find('input');
//console.log('INSIDE!' + inputs);
//var input = inputs[0].val();
//var val = $(input).val();
//console.log('VAL: ' + val);
//console.log('INSIDE!' + input);
//var string = '#diagramForm\\:diagram-' + input;
//$(string).addClass('ui-diagram-element-predecessor');
//+ val[i]));
elementMouseOver([ {
name : 'elementId',
value : id
} ]);
//console.log(val);
}, function(ev) {
//***leave***//
var id = $(this).attr('id');
});
</script>
$('.ui图表元素')。悬停(函数(ev){
var id=$(this.attr('id');
控制台日志(ev);
var id=$(this.attr('id');
//变量输入=$(this.find('input');
//console.log('INSIDE!'+输入);
//var input=inputs[0].val();
//var val=$(输入).val();
//console.log('VAL:'+VAL);
//console.log('INSIDE!'+输入);
//变量字符串='#diagramForm\\:diagram-'+输入;
//$(string).addClass('ui-diagram-element-preducer');
//+val[i]);
elementMouseOver([{
名称:'elementId',
值:id
} ]);
//控制台日志(val);
},功能(ev){
//***离开***//
var id=$(this.attr('id');
});
Bean的重要部分:
private DiagramNode selected;
private String selectedId = "x";
private List<String> selectedList = new ArrayList<String>();
public String getSelectedId() {
return selectedId;
}
public void setSelectedId(String selectedId) {
this.selectedId = selectedId;
}
public List<String> getSelectedList() {
return selectedList;
}
public void setSelectedList(ArrayList<String> selectedList) {
this.selectedList = selectedList;
}
public void onElementMouseOver() {
String input = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("elementId");
System.out.println("DataManager: Input: " + input);
String[] mouseoverIdSplit = input.split("-", 2);
if (mouseoverIdSplit.length < 2)
return;
System.out.println("DataManager: Mouseover:" + mouseoverIdSplit[1]);
selected = DataLoader.WPCPTaskRows.get(mouseoverIdSplit[1]);
selectedId = mouseoverIdSplit[1];
selectedList = selected.connections;
for (String id : selected.connections) {
System.out.println("Setting StyleClass for " + id);
String elementToUpdate = "diagramForm:diagram-" + id;
System.out.println(elementToUpdate);
RequestContext.getCurrentInstance().update(elementToUpdate);
RequestContext.getCurrentInstance()
.execute("$('#" + elementToUpdate + "').addClass(ui-diagram-element-predecessor);");
}
// RequestContext.getCurrentInstance().update("scriptBean");
// RequestContext.getCurrentInstance().update("someId");
RequestContext.getCurrentInstance().update("diagramForm");
RequestContext.getCurrentInstance().update("diagram");
}
public class DiagramElement implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
private String id;
private String role;
private String predecessor;
private List<String> predecessorList;
public DiagramElement() {
}
public DiagramElement(String name, String id, String role, String predecessor, List<String> predecessorList) {
this.name = name;
this.id = id;
this.role = role;
this.predecessor = predecessor;
this.predecessorList = predecessorList;
}
+getter and setter
已选择私有DiagramNode;
私有字符串selectedId=“x”;
private List selectedList=new ArrayList();
公共字符串getSelectedId(){
返回selectedId;
}
public void setSelectedId(字符串selectedId){
this.selectedId=selectedId;
}
公共列表getSelectedList(){
返回所选列表;
}
公共无效集合selectedList(ArrayList selectedList){
this.selectedList=selectedList;
}
public void onElementMouseOver(){
字符串输入=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(“elementId”);
System.out.println(“数据管理器:输入:“+Input”);
字符串[]mouseoverIdSplit=input.split(“-”,2);
如果(鼠标验证分裂长度<2)
返回;
System.out.println(“数据管理器:Mouseover:+mouseoverIdSplit[1]);
selected=DataLoader.WPCPTaskRows.get(mouseoverIdSplit[1]);
选择edid=mouseoverIdSplit[1];
selectedList=selected.connections;
用于(字符串id:选定。连接){
System.out.println(“为“+id”设置样式类);
String elementToUpdate=“diagramForm:diagram-”+id;
System.out.println(elementToUpdate);
RequestContext.getCurrentInstance().update(elementToUpdate);
RequestContext.getCurrentInstance()
.execute(“$”(“#“+elementToUpdate+”).addClass(ui图表元素前置项);”;
}
//RequestContext.getCurrentInstance().update(“scriptBean”);
//RequestContext.getCurrentInstance().update(“someId”);
RequestContext.getCurrentInstance().update(“diagramForm”);
RequestContext.getCurrentInstance()更新(“图表”);
}
公共类DiagrameElement实现可序列化{
/**
*
*/
私有静态最终长serialVersionUID=1L;
私有字符串名称;
私有字符串id;
私有字符串角色;
私有字符串前置;
私人名单先人名单;
公共diagrameElement()
<h:inputHidden value="#{el.predecessorList}" />
$('.ui-diagram-element').hover(
function(ev) {
var id = $(this).attr('id');
console.log(ev);
var id = $(this).attr('id');
var inputs = $(this).find('input');
console.log(inputs);
var input = inputs[1];
//var val = $(input).val();
//console.log('VAL: ' + val);
var array = input.value;
console.log(array);
var parsedArray = array.replace("[", "").replace("]",
"").replace(/\s/g, "").split(',');
for ( var pos in parsedArray) {
var str1 = '#diagramForm\\\:diagram-';
var str2 = parsedArray[pos];
console.log(str2);
var con = str1.concat(str2);
console.log(con);
$(con).addClass('ui-diagram-element-predecessor');
}
},
function(ev) {
//***leave***//
var id = $(this).attr('id');
console.log(ev);
var id = $(this).attr('id');
var inputs = $(this).find('input');
console.log(inputs);
var input = inputs[1];
//var val = $(input).val();
//console.log('VAL: ' + val);
var array = input.value;
console.log(array);
var parsedArray = array.replace("[", "").replace("]",
"").replace(/\s/g, "").split(',');
for ( var pos in parsedArray) {
var str1 = '#diagramForm\\\:diagram-';
var str2 = parsedArray[pos];
console.log(str2);
var con = str1.concat(str2);
console.log(con);
$(con).removeClass('ui-diagram-element-predecessor');
}
});