故障显示在阿贾克斯重新呈现deployJava按钮 [英] Trouble to display deployJava button on ajax rerender

查看:133
本文介绍了故障显示在阿贾克斯重新呈现deployJava按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法显示在阿贾克斯重新渲染

部署Java的按钮

 < H:格式ID =deployJavaForm呈现=#{myBean.shouldRender}>
< H:outputScript库=JSNAME =htt​​p://java.com/js/deployJava.js目标=头/>
<脚本类型=文/ JavaScript的>
    deployJava.createWebStartLaunchButton('blah.jnlp','1.7.0');
< / SCRIPT>
< /小时:形式GT;
 

  myBean.shouldRender ==真
 

和形式的更新显示(白页)中的唯一的事情就是deployJava按钮,并请求还未完成。如果shouldRender是初始请求,网页真实,正确显示按钮。 使用primefaces林的情况下,它可以提供帮助。

我想要做的是有正确的按钮,不管要显示如果部分阿贾克斯重新呈现或一个完整的初始请求。

更新: 我做功课,并创建了一个最小的例子,还是重新产生问题。看来我仍然得到同样的问题,不管剧本的声明是在头部或身体(我有deployJava.js副本资源/ JS)

 < XML版本=1.0编码=UTF-8&GT?;
!< D​​OCTYPE HTML PUBLIC -  // W3C // DTD XHTML 1.0过渡// ENhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< HTML的xmlns =htt​​p://www.w3.org/1999/xhtml
    的xmlns:F =htt​​p://java.sun.com/jsf/core
    的xmlns:H =htt​​p://java.sun.com/jsf/html
    的xmlns:UI =htt​​p://java.sun.com/jsf/facelets
    的xmlns:P =htt​​p://primefaces.org/ui>
< H:头>
    <! - <脚本类型=文/ JavaScript的SRC =htt​​p://java.com/js/deployJava.js/>  - >
< / H:头>
< H:身体GT;
    < H:outputScript库=JSNAME =deployJava.js目标=头/>
    < H:格式ID =djForm>
        <脚本类型=文/ JavaScript的>
            deployJava.createWebStartLaunchButton(
                    'test.jnlp','1.7.0');
        < / SCRIPT>
        <电话号码:的commandButton值=更新更新=djForm/>
    < /小时:形式GT;
< / H:身体GT;
< / HTML>
 

编辑:(specialgems) 下面的测试得到同样的问题如前面观察

 < H:outputScript>
deployJava.createWebStartLaunchButton(
                'test.jnlp','1.7.0');
< / H:outputScript>
 

编辑:添加图片

点击更新按钮后,仅deployJava按钮呈现和页面加载

编辑(丹尼尔):无论在成功的onComplete给予相同的行为:(

 < H:格式ID =djForm>
    &所述; H:outputScript>
        功能abcefg(){
            deployJava.createWebStartLaunchButton('test.jnlp','1.7.0');
        }
    < / H:outputScript>
<电话号码:的commandButton值=更新更新=djForm的onSuccess =abcefg()/>
< /小时:形式GT;
 

解决方案

另外,使用我的注释中所描述的js和css的知名度,你可以写自己的组合按钮组件。用Firebug,你可以调查它的标记是由deployJava.createWebStartLaunchButton脚本生成,并自行添加静态。所以,你的组件可以是:

 <!DOCTYPE HTML PUBLIC -  // W3C // DTD XHTML 1.0过渡// EN
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< HTML的xmlns =htt​​p://www.w3.org/1999/xhtml
    的xmlns:H =htt​​p://java.sun.com/jsf/html
    的xmlns:F =htt​​p://java.sun.com/jsf/core
    的xmlns:复合=htt​​p://java.sun.com/jsf/composite>
< HEAD>
<冠军> deployJava Button组件和LT; /标题>
< /头>
<身体GT;

    <复合:接口>
        <复合:属性名=版本要求=真
            TYPE =java.lang.String中/>
        <复合:属性名=URL要求=真
            TYPE =java.lang.String中/>
    < /复合材料:接口>

    <复合:执行>
        <一个的onmouseover =window.status ='';返回true;
            HREF =javascript的:(!deployJava.isWebStartInstalled(安培; QUOT;#{cc.attrs.version}&安培; QUOT))如果{如果(deployJava.installLatestJRE()){如果(deployJava.launch(安培; QUOT; #{cc.attrs.url}&安培; QUOT)){}}}否则{如果(deployJava.launch(安培; QUOT;#{cc.attrs.url}&安培; QUOT)){}}> < IMG
            边界=0的src =// java.com/js/webstart.png/>&所述; / a取代;
    < /复合:执行>
< /身体GT;
< / HTML>
 

让你的网页是:

 < XML版本=1.0编码=UTF-8&GT?;
!< D​​OCTYPE HTML PUBLIC -  // W3C // DTD XHTML 1.0过渡// ENhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< HTML的xmlns =htt​​p://www.w3.org/1999/xhtml
    的xmlns:F =htt​​p://java.sun.com/jsf/core
    的xmlns:H =htt​​p://java.sun.com/jsf/html
    的xmlns:UI =htt​​p://java.sun.com/jsf/facelets
    的xmlns:谱曲=htt​​p://java.sun.com/jsf/composite/comps
    的xmlns:P =htt​​p://primefaces.org/ui>
< H:头>
    <! - <脚本类型=文/ JavaScript的SRC =htt​​p://java.com/js/deployJava.js/>  - >
< / H:头>
< H:身体GT;
    < H:outputScript库=JSNAME =deployJava.js目标=头/>
    < H:格式ID =djForm>
       <谱曲:deployJavaButton版本=1.7.0URL =test.jnlp呈现=#{myBean.shouldRender}/>

        <电话号码:的commandButton值=更新更新=djForm/>
    < /小时:形式GT;
< / H:身体GT;
< / HTML>
 

其主要思想是,以避免执行按钮创建脚本两倍多。

I'm having trouble displaying the deploy-java button on ajax rerender

<h:form id="deployJavaForm" rendered="#{myBean.shouldRender}">
<h:outputScript library="js" name="http://java.com/js/deployJava.js" target="head" />
<script type="text/javascript">
    deployJava.createWebStartLaunchButton('blah.jnlp', '1.7.0');
</script>
</h:form>

when

myBean.shouldRender == true

and the form is updated the only thing being displayed (on a white page) is the deployJava-button and the request is left hanging. if shouldRender is true on the initial request, page and button is displayed correctly. Im using primefaces in case it can help.

What I want to do is to have the button to be displayed correctly regardless if its part of a ajax rerender or a complete initial request.

Update: I did my homework and created a minimal example that still reproduces the problem. It seems I still get the same problems regardless if script declaration is in head or in body (I have copy of deployJava.js in resources/js)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
<h:head>
    <!-- <script type="text/javascript" src="http://java.com/js/deployJava.js" />-->
</h:head>
<h:body>
    <h:outputScript library="js" name="deployJava.js" target="head" />
    <h:form id="djForm">
        <script type="text/javascript">
            deployJava.createWebStartLaunchButton(
                    'test.jnlp', '1.7.0');
        </script>
        <p:commandButton value="update" update="djForm" />
    </h:form>
</h:body>
</html>

edit: (specialgems) below test give same problem as observed earlier.

<h:outputScript>
deployJava.createWebStartLaunchButton(
                'test.jnlp', '1.7.0');
</h:outputScript>

edit: added picture

after click of update button, only deployJava button is rendered and page is loading

edit (daniel): both on success and oncomplete give same behaviour :(

<h:form id="djForm">
    <h:outputScript>
        function abcefg() {
            deployJava.createWebStartLaunchButton('test.jnlp', '1.7.0');
        }
    </h:outputScript>
<p:commandButton value="update" update="djForm" onsuccess="abcefg()" />
</h:form>

解决方案

Alternatively to using js and css visibility described in my comment you can write own composite button component. Using Firebug you can investigate which markup is generated by the deployJava.createWebStartLaunchButton script and add it by yourself statically. So your component could be:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:composite="http://java.sun.com/jsf/composite">
<head>
<title>deployJava Button component</title>
</head>
<body>

    <composite:interface>
        <composite:attribute name="version" required="true"
            type="java.lang.String" />
        <composite:attribute name="url" required="true"
            type="java.lang.String" />
    </composite:interface>

    <composite:implementation>
        <a onmouseover="window.status=''; return true;"
            href="javascript:if (!deployJava.isWebStartInstalled(&quot;#{cc.attrs.version}&quot;)) {if (deployJava.installLatestJRE()) {if (deployJava.launch(&quot;#{cc.attrs.url}&quot;)) {}}} else {if (deployJava.launch(&quot;#{cc.attrs.url}&quot;)) {}}"><img
            border="0" src="//java.com/js/webstart.png" /></a>
    </composite:implementation>
</body>
</html> 

so your page will be:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:comps="http://java.sun.com/jsf/composite/comps"
    xmlns:p="http://primefaces.org/ui">
<h:head>
    <!-- <script type="text/javascript" src="http://java.com/js/deployJava.js" />-->
</h:head>
<h:body>
    <h:outputScript library="js" name="deployJava.js" target="head" />
    <h:form id="djForm">
       <comps:deployJavaButton version="1.7.0" url="test.jnlp" rendered="#{myBean.shouldRender}" />

        <p:commandButton value="update" update="djForm" />
    </h:form>
</h:body>
</html>

The main idea is to avoid executing button creation script twice and more.

这篇关于故障显示在阿贾克斯重新呈现deployJava按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆