gpt4 book ai didi

ajax - 带有 f :ajax 的 JSF 2 自定义复合组件

转载 作者:行者123 更新时间:2023-12-03 14:35:02 26 4
gpt4 key购买 nike

我正在尝试使用这个 jQuery 插件 http://www.eyecon.ro/colorpicker/ 创建一个自定义复合组件 colorPicker .

我希望能够附加一个 jsf 标签 f:ajax , and when a color is selected, perform an ajax call to the server.我一直在测试这个功能,看起来一切都是正确的,但显然我错过了一些东西,因为从未调用过监听器。

这是我的组件代码:

<!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:c="http://java.sun.com/jsp/jstl/core"
xmlns:composite="http://java.sun.com/jsf/composite">
<composite:interface>
<composite:attribute name="label" />
<composite:clientBehavior name="customEvent" event="change" targets="#{cc.clientId}"/>
</composite:interface>
<composite:implementation>
<h:outputStylesheet library="css" name="colorpicker/colorpicker.css" />
<h:outputStylesheet library="css" name="colorpicker/layout.css" />
<h:outputScript library="js" name="colorpicker/jquery.js" target="head"/>
<h:outputScript library="js" name="colorpicker/colorpicker.js" target="head"/>
<h:outputScript library="js" name="colorpicker/eye.js" target="head"/>
<h:outputScript library="js" name="colorpicker/utils.js" target="head"/>
<h:outputScript library="js" name="colorpicker/layout.js" target="head"/>
<h:outputScript library="js" name="colorpicker/hex.js" target="head"/>


<div id="#{cc.clientId}" class="colorSelector">
<div style="background-color: #0000FF;"></div>
</div>

<script>


//jQuery(document).ready(function() {

jQuery('##{cc.clientId}').ColorPicker({
color: '#0000ff',
onShow: function (colpkr) {
jQuery(colpkr).fadeIn(2000);
alert('onchange1');
launchEvent(document.getElementById('#{cc.clientId}'));
alert('onchange2');
//return false;
},
onHide: function (colpkr) {


jQuery(colpkr).fadeOut(2000);
return false;
},
onChange: function (hsb, hex, rgb) {


}
});

//});

/* <![CDATA[ */
function launchEvent(fieldName) {
alert('launchEvent1');
if ("fireEvent" in fieldName) {
alert('launchEvent2');
fieldName.fireEvent("onchange");
alert('launchEvent3');
} else {
alert('launchEvent4');
var evt = document.createEvent("HTMLEvents");
alert('launchEvent5');
evt.initEvent("change", false, true);
alert('launchEvent6');
fieldName.dispatchEvent(evt);
alert('launchEvent7');
}
/* ]]> */
}

</script>

</composite:implementation>
</html>

这是页面实现:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:r="http://richfaces.org/rich"
xmlns:a="http://richfaces.org/a4j"
xmlns:s="http://jboss.org/seam/faces"
xmlns:cp="http://java.sun.com/jsf/composite/component">

<h:head>
<title>Test</title>
</h:head>
<h:body>
<f:view>
<h:form prependId="false">
<cp:colorpicker id="colorSelector">
<f:ajax event="customEvent" listener="#{themeBean.changeColor1}" onevent="alert('event raised');"/>
</cp:colorpicker>
<h:inputText value="#{themeBean.color1}"></h:inputText>
</h:form>
</f:view>
</h:body>

</html>

最佳答案

<f:ajax>只能附加到 ClientBehaviorHolder <h:inputText> .一个普通的 HTML <div>不是这样的一个组件。你基本上需要有一个 HTML <input>元素,不是 <div>元素。更重要的是,您将如何在 bean 中设置提交的值?

<cc:interface>
...
<cc:clientBehavior name="customEvent" targets="input" event="valueChange" />
</cc:interface>
<cc:implementation>
...
<h:inputText id="input" value="#{cc.attrs.value}" />

<h:outputScript>
jQuery("[id='#{cc.clientId}:input']").ColorPicker({
// ...
});
</h:outputScript>
</cc:implementation>

(请注意,我也修复了 jQuery 选择器;这样 JSF 客户端 ID 分隔符 : 将被正确考虑,而不是使 CSS 选择器变形)

无关 对于具体问题,您对 <f:ajax onevent> 的用法是错的。它应该指向一个函数引用,它不应该包含一些函数调用。正确的用法是
<f:ajax ... onevent="functionName" />

...

<h:outputScript>
function functionName(data) {
alert("Event " + data.status + " raised");
}
</h:outputScript>

也可以看看:
  • ajax call in jsf 2.0 (myfaces), the onevent Javascript function in the ajax tag gets called before the rendering is complete
  • 关于ajax - 带有 f :ajax 的 JSF 2 自定义复合组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13751641/

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