我正在开发一个 JSF 自定义组件,使用我在以下书籍Pro JSF and HTML5 by Apress 中找到的信息。
至此,我成功开发了:
一切正常,组件已成功呈现。
现在我想向呈现的元素添加 javascript 事件和行为,更具体地说,我的自定义组件的目的是在网页上呈现菜单,我想向菜单项添加下拉效果。我知道如何用 JavaScript 编写整个代码,但我不知道的是:
将 javascript 事件和行为添加到自定义组件中呈现的元素的最佳实践是什么?
JS文件应该放在哪里?如何将事件绑定到元素?它是在渲染类中完成的,还是在网页上完成的?
谢谢,如果需要,我愿意提供有关我的代码的更多具体信息。
Java 组件类
注意: CosmoMenu 类只是一个 bean。它基本上存储一个菜单树(一个标签、一个 id 和一组子项,如果有的话)。
package components;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import domain.CosmoMenu;
import javax.faces.component.FacesComponent;
import javax.faces.component.UIComponentBase;
@FacesComponent(CosmoMenuComponent.COMPONENT_TYPE)
public class CosmoMenuComponent extends UIComponentBase{
/** Component family of {@link CosmoMenuComponent}. */
public static final String COMPONENT_FAMILY = "CosmoMenu";
/** Component type of {@link …Run Code Online (Sandbox Code Playgroud) 我正在使用一个动态菜单栏.当按下命令按钮时,应更新菜单栏的内容.
这是我非常简单的xhtml页面
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>CoSMo</title>
</h:head>
<h:body>
#{simpleMenuBacking.init()}
<h:form>
<p:commandButton value="Submit" action="#{simpleMenuBacking.updateModel()}" update="mb1"/>
<p:growl id="messages" showDetail="false"/>
<p:menubar id="mb1" model="#{simpleMenuBacking.model}" />
</h:form>
</h:body>
Run Code Online (Sandbox Code Playgroud)
而我的(相应简单)支持bean:
@Named
@SessionScoped
public class SimpleMenuBacking implements Serializable {
private DefaultMenuModel model;
public void init() {
Logger.getLogger(UserBacking.class.getName()).info("[SimpleMenuBacking.init()] Starting.");
model = new DefaultMenuModel();
String myMenuEntry = "MENU ENTRY " + new Random().nextInt();
Logger.getLogger(UserBacking.class.getName()).info(myMenuEntry);
model.addElement(new DefaultSubMenu(myMenuEntry));
}
public SimpleMenuBacking() {
}
public DefaultMenuModel getModel() {
Logger.getLogger(UserBacking.class.getName()).info("[SimpleMenuBacking.getModel()] Starting.");
return model;
}
public void updateModel() {
Logger.getLogger(UserBacking.class.getName()).info("[SimpleMenuBacking.updateModel()] Starting.");
String …Run Code Online (Sandbox Code Playgroud) 我是VS 2012的新手,每次使用XAML Designer时都会遇到此问题。
每次我向窗口添加一个项目(例如RadioButton和Image,Label)时,它都会删除前一个。
结果,我的窗口中只能有一个项目,我知道这是荒谬的,我缺少什么?
这是窗口的xaml
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WpfViewers="clr-namespace:Microsoft.Samples.Kinect.WpfViewers;assembly=Microsoft.Samples.Kinect.WpfViewers" xmlns:Toolkit="clr-namespace:Microsoft.Kinect.Toolkit;assembly=Microsoft.Kinect.Toolkit" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="KinectSetupDev.MainWindow"
Title="MainWindow" Height="400" Width="600">
<Toolkit:KinectSensorChooserUI x:Name="SensorChooserUI" VerticalAlignment="Center" Height="40" Margin="277,2,275,328"/>
</Window>
Run Code Online (Sandbox Code Playgroud)
这是在窗口上拖动图像后的xaml(从工具箱)
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WpfViewers="clr-namespace:Microsoft.Samples.Kinect.WpfViewers;assembly=Microsoft.Samples.Kinect.WpfViewers" xmlns:Toolkit="clr-namespace:Microsoft.Kinect.Toolkit;assembly=Microsoft.Kinect.Toolkit" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="KinectSetupDev.MainWindow"
Title="MainWindow" Height="400" Width="600">
<Image HorizontalAlignment="Left" Height="86" Margin="77,188,0,0" VerticalAlignment="Top" Width="111"/>
</Window>
Run Code Online (Sandbox Code Playgroud) 检查一系列数字是否有增加或减少趋势的最佳方法是什么?
我知道我可以选择序列的第一个和最后一个值,并检查它们的区别,但我想要一个更强大的检查.这意味着我希望能够在大多数递减的序列中容忍少数增加的值,反之亦然.
更具体地说,数字存储为
vector<int> mySequence;
Run Code Online (Sandbox Code Playgroud)
关于我正在处理的数字序列的更多细节:
我最近从OpenCV C++ API切换到JavaCV,我正在尝试执行基本操作,例如迭代Mat.我正在尝试访问Mat的像素值,但我似乎无法找到方法,而JavaCV项目缺少文档.使用OpenCV C++ API,我曾经使用该.at()方法访问Mat的像素值.
Mat加载为CV_8UC1 Mat(灰度),如下面的代码所示,我想打印/使用像素的0-255值.
Mat image = imread("images/Text00.png", CV_8UC1);
// Make sure it was successfully loaded.
if (image == null) {
System.out.println("Image not found!");
System.exit(1);
}
System.out.println(image.rows());
System.out.println(image.cols());
for (int y = 0; y < image.rows(); y++) {
for (int x = 0; x < image.cols(); x++) {
// How to print the 0 to 255 value of each pixel in the Mat image.
}
}
Run Code Online (Sandbox Code Playgroud)
类似但不适用的答案:
我一直在谷歌搜索并尝试几天,试图弄清楚如何让32位OpenCV在OS X Lion上运行,但可以找到64位版本.
所以我有以下问题:
OpenCV库有32位还是64位,这是正确的吗?
如何在Lion上使用32位OpenCV?我尝试了以下方法: - 通过MacPorts安装OpenCV:nope,MacPorts安装64位版本.BI删除了OpenCV和MacPorts.
brew install opencv --build32
但看起来他们也是64位.删除了OpenCV和Homebrew.
我写过"它们看起来像64位",因为我必须在OS X Snow Leopard下制作的Xcode项目中取代OpenC,针对32位Mac,我总是遇到很多错误:
ld:警告:忽略文件/usr/local/Cellar/opencv/2.4.1/lib/libopencv_calib3d.2.4.1.dylib,文件是为不支持的文件格式构建的,而不是被链接的体系结构(i386)
所以我认为OpenCV的东西是64位的.如果我强制项目以64位运行,它会摩擦但不能正常工作并卡住.
有没有标准的方法来检查我的OpenCV库是64位还是32位?
我在哪里可以获得32位OpenCV?
我正在使用Kinect SDK 1.6,我正在关注Windows Kinect Quickstart系列的Skeleton Tracking Funamentals教程,可在此处获得.
即使这些教程是针对SDK 1.0制作的,所有内容都很顺利,直到我按照说明将手的位置映射到自定义大小的窗口(例如1280x720).
Dan Fernandez正在使用以下代码行来实现这一目标
private void ScalePosition(FrameworkElement element, Joint joint)
{
// Convert the value to X/Y;
Joint scaledJoint = joint.ScaleTo(1280, 720);
....
}
Run Code Online (Sandbox Code Playgroud)
好吧,该方法ScaleTo不是自定义函数,它应该在Kinect SDK中提供,但根据我的编辑器,没有这样的方法.我无法找到它,我认为它可能已被移动/重命名/自SDK 1.0以来的任何东西.
只是为了确保一切都井然有序,这里是我的using清单,其他人(骷髅跟踪等)正在工作,所以我真的无法搞清楚
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using …Run Code Online (Sandbox Code Playgroud) c++ ×2
jsf ×2
opencv ×2
wpf ×2
32bit-64bit ×1
int ×1
java ×1
javacv ×1
javascript ×1
kinect ×1
kinect-sdk ×1
mat ×1
menubar ×1
osx-lion ×1
primefaces ×1
taglib ×1
trend ×1
vector ×1
xaml ×1
xcode4 ×1