将参数从JavaScript传递到p:remoteCommand-不起作用?

问题描述 投票:0回答:1

尽管多次问过这个问题,但是建议的解决方案对我不起作用。

因此,我尝试再次询问。我在6.2版中使用了primefaces,并在6.2.10版中使用了primefaces扩展进行了测试]

我当前的代码是:我不明白的是remoteCommand和javaScript如何交互并将“结果”(resultx)值发送到Bean方法...我什至尝试了其他星座,但是每次日志为空时,请在打印Java脚本时始终打印预期的结果。

XHTML:

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

<p:panel header="Quest Panel" id="questEditPanel">
<p:diagram id="diagram" value="#{questChart.model}" style="height:1200px" styleClass="ui-widget-content" var="el">
<f:facet name="element">

    <h:outputText id="questName" value="#{el.questName}" style="display:block; margin-top:1em;"/>
    <p:commandLink onclick="setClickedSpanElement(this)" >
        <p:graphicImage name="woodenui/gear.png" width="20" height="20"/>
    </p:commandLink>


</f:facet>


<pe:remoteCommand name="execAssignment" action="#{questChart.setResult}">
    <pe:methodSignature parameters="java.lang.String" />
    <pe:methodParam name="resultx" />
</pe:remoteCommand>

<p:remoteCommand name="execAssignment2" actionListener="#{questChart.setResult2}" />


<p:ajax event="connect" listener="#{questChart.onConnect}" />
<p:ajax event="disconnect" listener="#{questChart.onDisconnect}" />
<p:ajax event="connectionChange" listener="#{questChart.onConnectionChange}" />
</p:diagram>
</p:panel>

<script type="text/javascript">

function setClickedSpanElement(parentElement) {
var resultx = parentElement.parentNode.innerHTML;
console.log(result)
execAssignment([{resultx:result}]);
execAssignment2([{resultx:result}]);
}

</script>

</ui:composition>

bean:

public void setResult() {
    FacesContext context = FacesContext.getCurrentInstance();
    Map<String, String> map = context.getExternalContext().getRequestParameterMap();
    log.info("done... : " + map.get("resultx"));
}

public void setResult2(String resultx) {

    log.info("done...2 : " + resultx);
}

LOG:

01:32:47.986 [http-nio-8080-exec-3] INFO  com.wolfo.beans.QuestChart - done... : null
01:32:48.047 [http-nio-8080-exec-6] INFO  com.wolfo.beans.QuestChart - done...2 : javax.faces.event.ActionEvent[source=org.primefaces.component.remotecommand.RemoteCommand@3b30fbb2]

浏览器控制台:

<span id="quest-editor-form:questName" style="display:block; margin-top:1em;">Quest Element 0</span><a id="quest-editor-form:j_idt13" href="#" class="ui-commandlink ui-widget" onclick="setClickedSpanElement(this);PrimeFaces.ab({s:&quot;quest-editor-form:j_idt13&quot;});return false;"><img id="quest-editor-form:j_idt14" src="/javax.faces.resource/woodenui/gear.png.xhtml" alt="" width="20" height="20"></a>
jsf primefaces
1个回答
0
投票

好。这不是很明显,但是我已经设法解决了。代替使用pe:remoteCommand action =“” ....更改为actionListener =“”提供了解决方案。

<pe:remoteCommand name="execAssignment" actionListener="#{questChart.setResult2}">
    <pe:methodSignature parameters="java.lang.String" />
    <pe:methodParam name="resultx" />
</pe:remoteCommand>

工作。

完整答案:带面板的xhtml部分:

<p:panel header="Quest Panel" id="questEditPanel">
<p:diagram id="diagram" value="#{questChart.model}" style="height:1200px" styleClass="ui-widget-content" var="el">
<f:facet name="element">

<h:outputText id="questName" value="#{el.questName}" style="display:block; margin-top:1em;"/>
<p:commandLink onclick="setClickedSpanElement(this)" >
<p:graphicImage name="woodenui/gear.png" width="20" height="20"/>
</p:commandLink>


</f:facet>

<pe:remoteCommand name="execAssignment" actionListener="#{questChart.setResult2}">
<pe:methodSignature parameters="java.lang.String" />
<pe:methodParam name="resultx" />
</pe:remoteCommand>


<p:ajax event="connect" listener="#{questChart.onConnect}" />
<p:ajax event="disconnect" listener="#{questChart.onDisconnect}" />
<p:ajax event="connectionChange" listener="#{questChart.onConnectionChange}" />
</p:diagram>
</p:panel>

<script type="text/javascript">

function setClickedSpanElement(parentElement) {
var resultx = parentElement.parentNode.innerHTML;
console.log(resultx)
execAssignment(resultx);
}

</script>

bean:

public void setResult2(String resultx) {
 log.info("done...2 : " + resultx);
}
© www.soinside.com 2019 - 2024. All rights reserved.