通过数据库数据构建树结构(二)
打开项目窗口,右键单击Web页节点,然后从弹出菜单中选择新建 可视化 Web JSF 页。将新页命名为Trip。 打开服务窗口,然后将表 TRIP 节点拖放到Trip页的可视 编辑器上。 导航窗口将在 Trip 部分显示 tripDataProvider 节点 , 在 SessionBean1 部分中显示 tr
打开“项目”窗口,右键单击“Web页”节点,然后从弹出菜单中选择“新建>可视化Web JSF页”。将新页命名为Trip。
打开“服务”窗口,然后将“表> TRIP 节点”拖放到Trip页的可视编辑器上。
导航窗口将在“Trip”部分显示“tripDataProvider”节点,在“SessionBean1”部分中显示“tripRowSet1”节点。
在导航窗口中,右键单击“tripRowSet1”节点,然后选择“编辑SQL语句”。
在查询编辑器的“设计网格”中,右键单击TRIPID行中的任意单元格,然后选择“添加查询条件”。在对话框中,将“比较”下拉列表设置为“= 等于”,然后选中“参数”单选按钮。单击“确定”按钮。
我们可以在TRIPID的<span>“</span>条件”列中看到“= ?”,并在SQL查询中添加以下WHERE子句:
<span><font><font>WHERE TRAVEL.TRIP.TRIPID = ? <p></p></font></font></span>
在可视编辑器中打开Trip页。从组件面板的Basic部分拖动一个“超级链接”组件到页面上,键入<span>“主页”,然后按回车键。</span>
在超级链接组件的<span>“</span>属性”窗口中,单击action属性的省略号<span>hyperlink1_action</span>
,单击<span>“</span>确定”按钮。
IDE会将<span>hyperlink1_action</span>事件处理程序添加到Java源代码中。
从组件面板拖动一个“消息组”组件到页面上,然后将其放在“超级链接”组件的右侧。
从组件面板的“布局”部分拖动一个“属性表单”组件到页面上,然后将它放在“超级链接”组件的下面。
“属性表单”组件提供了一个设置行程信息布局的容器。“属性表单”组件包含了一个“属性表单部分”,而该部分又包含一个“属性”组件。
选择“属性表单部分
注:
在<span>“</span>概要”窗口中,展开“propertySheet1>div<span>label</span>
<span>属性设置为</span>
<span>“</span>
<span>启程日期</span>
<span>:”,</span>
然后按回车键。
在“概要”窗口中,选择“div1”,然后单击鼠标右键,从弹出菜单中选择“添加属性”。在“属性”窗口中,将<span>label属性设置为“出发城市:”,</span>
然后按回车键。
从组件面板拖放一个“静态文本”组件到“概要”窗口的“property1”节点上。
该静态文本将成为property1的一个子节点。同时该静态文本还将出现在可视编辑器中。
TRIP.DEPDAT,然后单击“确定”。
当前日期会出现在可视编辑器的静态文本组件中。
添加静态文本组件到property2中,然后将静态文本绑定到TRIP.DEPCITY。
添加代码
现在,我们将添加一些代码,以便Trip页可以获取存储在页面1中的tripid,同时页面1也可以获取存储在Trip页中的personid。
在 Java 编辑器中打开Trip页,然后找到<span>prerender</span>
方法。添加以下粗体显示的代码,使得该方法可以获取存储在页面1中的tripId。
代码示例2:Trip页中的prerender方法 |
<span><font><font><span> </span>public void prerender() {<p></p></font></font></span> Copier après la connexion <span><p><font> </font></p></span> Copier après la connexion Copier après la connexion <span><font><font><span> </span>// Get the person id from the request parameters<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>String parmTripId = (String)<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>getExternalContext().getRequestParameterMap().get("tripId");<p></p></font></font></span> Copier après la connexion <span><p><font> </font></p></span> Copier après la connexion Copier après la connexion <span><font><font><span> </span>if (parmTripId != null) {<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>Integer tripId = new Integer(parmTripId);<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>try {<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>getSessionBean1().getTripRowSet1().setObject(1, tripId);<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span><span> </span>tripDataProvider.refresh();<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>} catch (Exception e) {<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>error("Cannot display trip " + tripId);<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>log("Cannot display trip " + tripId, e);<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>}<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>}else {<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>error("No trip id specified.");<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>}<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>}<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span><p></p></font></font></span> Copier après la connexion Copier après la connexion Copier après la connexion |
<span>setObject方法</span>
将行程查询的第一个参数设置为tripId。也就是说,该方法将查询中的?替换为 tripId。此查询只有一个参数,因此我们只需调用<span>setObject</span>
一次。对<span>tripDataProvider1.refresh()的调用</span>
会同时调用<span>CachedRowSet.release()</span>
,并且重置CachedRowSetDataProvider的光标。但是此时不会执行CachesRowSet。
找到<span>hyperlink1_action方法。</span>
添加以下粗体显示的代码,将personId传递给页面1:
代码示例3:Trip页的hyperlink1_action方法 |
<span><font><font><span> </span>public String hyperlink1_action() {<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>getRequestBean1().setPersonId(<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>(Integer)tripDataProvider.getValue("trip.personid"));<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>return null;<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>}<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span><span> </span><p></p></font></font></span> Copier après la connexion |
定义页面导航
最后,指定页面1上的树节点与Trip页之间的导航。
在可视编辑器的设计视图中的任意位置单击鼠标右键,选择“页面导航”。
在Page1.jsp图标上单击连接器接口,然后拖动一条连线到Trip.jsp图标。
展开Trip.jsp图标,然后从“超级链接”组件拖动一条连线到Page1.jsp图标。页面导航设置。
运行该应用程序。在主页上,展开游客的姓名,然后单击某个旅行日期。
此时将打开Trip页打开,其中包含该行程的详细信息。
在Trip页中,单击“主页”链接。请注意,在主页上我们选择的最后一个行程的一级节点仍处于展开状态。
通过展开和折叠一级树节点并单击旅行日期,我们可以继续浏览该应用程序。
更多功能:将Action方法和树节点绑定
如果我们使用的是JavaServer Faces 1.2树组件(也就是说,项目的Java EE版本设置为Java EE 5平台),则可以将action方法与树节点绑定;并且通过在action方法中调用树组件的<span>getSelected()</span>
方法,可以确定单击的是哪个节点,如以下步骤所示。
添加一个tripId属性到Integer类型的Request Bean中。
将以下方法添加页面1的Java源代码中:
代码示例4:页面1的tripNode_action方法 |
<span><font><font><span> </span>public String tripNode_action() {<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>// Get the id of the currently selected tree node<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>String nodeId = displayTree.getSelected();<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>// Find the tree node component with the given id<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>TreeNode selectedNode =<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>(TreeNode) this.getForm1().findComponentById(nodeId);<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>try {<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>// Node's id property is composed of "trip" plus the trip id<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>// Extract the trip id and save it for the next page<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>Integer tripId = Integer.valueOf(selectedNode.getId().substring(4));<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>getRequestBean1().setTripId(tripId);<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>} catch (Exception e) {<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>error("Can't convert node id to Integer: " +<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span><span> </span>selectedNode.getId().substring(4));<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>return null;<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>}<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>return "case1";<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>}<p></p></font></font></span> Copier après la connexion Copier après la connexion <span><font><font><span> </span><p></p></font></font></span> Copier après la connexion Copier après la connexion Copier après la connexion |
在页面1的<span>prerender方法中,将以下代码替换为代码示例5中的代码。</span>
<span><font><font><span> </span>tripNode.setUrl("/faces/Trip.jsp?tripId=" +<p></p></font></font></span>
<span><font><font><span> </span>tripDataProvider.getValue("TRIP.TRIPID").toString());<span> </span><p></p></font></font></span>
代码示例5:调整Prerender方法 |
<span><font><font><span> </span>ExpressionFactory exFactory =<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>getApplication().getExpressionFactory();<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>ELContext elContext =<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>getFacesContext().getELContext();<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>tripNode.setActionExpression(<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>exFactory.createMethodExpression(<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>elContext, "#{Page1.tripNode_action}",<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>String.class, new Class>[0]));<p></p></font></font></span> Copier après la connexion |
按Alt-Shift-F组合键来修复导入。
在Trip页的<span>prerender()方法中,将主体替换为以下代码:</span>
代码示例6:Trip页的prerender方法 |
<span><font><font><span> </span>public void prerender() {<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span><span> </span>Integer tripId =<span> </span>getRequestBean1().getTripId();<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>try {<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>getSessionBean1().getTripRowSet1().setObject(1, tripId);<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>tripDataProvider1.refresh();<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>} catch (Exception e) {<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>error("Cannot display trip " + tripId);<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span><span> </span>log("Cannot display trip " + tripId, e);<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>}<p></p></font></font></span> Copier après la connexion <span><font><font><span> </span>}<p></p></font></font></span> Copier après la connexion Copier après la connexion <span><font><font><span> </span><p></p></font></font></span> Copier après la connexion Copier après la connexion Copier après la connexion |
运行应用程序。
关于树节点选择的注意事项
如果我们的项目是J2EE 1.4项目,则在选择树节点时应注意以下一些事项:
JavaServer Faces 1.1树组件无法使用<span>getSelected</span>
<span>方法或</span>
<span>getCookieSelectedTreeNode</span>
<span>方法来确定我们选择的是哪个节点。</span>
如果用户禁用了浏览器中的cookie,那么这些方法将不能返回到正确值。另外,对于开启cookies的浏览器,用户第一次访问页面并单击某个节点时,cokkie 可能会返回错误值。如果浏览器中有前一次访问时遗留的cookie信息,则有可能返回前一次选定的值。由于在JavaServer Faces 1.2版本中,树组件不使用cookie来保存选定的信息,所以1.2版本中不存在上述问题。
树节点的突出显示部分不在两个会话之间被清除。如果多次运行本教程中的程序,则上次会话中选择的节点将在页面刚打开时突出显示在新会话中。这个问题是由于使用cookie来传输选定的节点ID而造成的。
结束语
在本教程中,我们通过数据库数据构建了一个树结构。我们构建了一个由两个页面组成的应用程序,其中第一页包含一个树组件。我们将数据库中的名字填充到树结构的一级节点,然后用此人的行程来填充二级节点。然后我们将第一页上的每个行程链接到第二页,在第二页中显示了该行程的详细信息。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Vous êtes confronté à un décalage et à une connexion de données mobile lente sur iPhone ? En règle générale, la puissance de l'Internet cellulaire sur votre téléphone dépend de plusieurs facteurs tels que la région, le type de réseau cellulaire, le type d'itinérance, etc. Vous pouvez prendre certaines mesures pour obtenir une connexion Internet cellulaire plus rapide et plus fiable. Correctif 1 – Forcer le redémarrage de l'iPhone Parfois, le redémarrage forcé de votre appareil réinitialise simplement beaucoup de choses, y compris la connexion cellulaire. Étape 1 – Appuyez simplement une fois sur la touche d’augmentation du volume et relâchez-la. Ensuite, appuyez sur la touche de réduction du volume et relâchez-la à nouveau. Étape 2 – La partie suivante du processus consiste à maintenir le bouton sur le côté droit. Laissez l'iPhone finir de redémarrer. Activez les données cellulaires et vérifiez la vitesse du réseau. Vérifiez à nouveau Correctif 2 – Changer le mode de données Bien que la 5G offre de meilleures vitesses de réseau, elle fonctionne mieux lorsque le signal est plus faible

Je pleure à mort. Le monde construit à la folie de grands modèles. Les données sur Internet ne suffisent pas du tout. Le modèle de formation ressemble à « The Hunger Games », et les chercheurs en IA du monde entier se demandent comment nourrir ces personnes avides de données. Ce problème est particulièrement important dans les tâches multimodales. À une époque où rien ne pouvait être fait, une équipe de start-up du département de l'Université Renmin de Chine a utilisé son propre nouveau modèle pour devenir la première en Chine à faire de « l'auto-alimentation des données générées par le modèle » une réalité. De plus, il s’agit d’une approche à deux volets, du côté compréhension et du côté génération, les deux côtés peuvent générer de nouvelles données multimodales de haute qualité et fournir un retour de données au modèle lui-même. Qu'est-ce qu'un modèle ? Awaker 1.0, un grand modèle multimodal qui vient d'apparaître sur le Forum Zhongguancun. Qui est l'équipe ? Moteur Sophon. Fondé par Gao Yizhao, doctorant à la Hillhouse School of Artificial Intelligence de l’Université Renmin.

Récemment, le milieu militaire a été submergé par la nouvelle : les avions de combat militaires américains peuvent désormais mener des combats aériens entièrement automatiques grâce à l'IA. Oui, tout récemment, l’avion de combat IA de l’armée américaine a été rendu public pour la première fois, dévoilant ainsi son mystère. Le nom complet de ce chasseur est Variable Stability Simulator Test Aircraft (VISTA). Il a été personnellement piloté par le secrétaire de l'US Air Force pour simuler une bataille aérienne en tête-à-tête. Le 2 mai, le secrétaire de l'US Air Force, Frank Kendall, a décollé à bord d'un X-62AVISTA à la base aérienne d'Edwards. Notez que pendant le vol d'une heure, toutes les actions de vol ont été effectuées de manière autonome par l'IA ! Kendall a déclaré : "Au cours des dernières décennies, nous avons réfléchi au potentiel illimité du combat air-air autonome, mais cela a toujours semblé hors de portée." Mais maintenant,

La dernière vidéo du robot Optimus de Tesla est sortie, et il peut déjà fonctionner en usine. À vitesse normale, il trie les batteries (les batteries 4680 de Tesla) comme ceci : Le responsable a également publié à quoi cela ressemble à une vitesse 20 fois supérieure - sur un petit "poste de travail", en sélectionnant et en sélectionnant et en sélectionnant : Cette fois, il est publié L'un des points forts de la vidéo est qu'Optimus réalise ce travail en usine, de manière totalement autonome, sans intervention humaine tout au long du processus. Et du point de vue d'Optimus, il peut également récupérer et placer la batterie tordue, en se concentrant sur la correction automatique des erreurs : concernant la main d'Optimus, le scientifique de NVIDIA Jim Fan a donné une évaluation élevée : la main d'Optimus est l'un des robots à cinq doigts du monde. le plus adroit. Ses mains ne sont pas seulement tactiles

Le FP8 et la précision de quantification inférieure en virgule flottante ne sont plus le « brevet » du H100 ! Lao Huang voulait que tout le monde utilise INT8/INT4, et l'équipe Microsoft DeepSpeed a commencé à exécuter FP6 sur A100 sans le soutien officiel de NVIDIA. Les résultats des tests montrent que la quantification FP6 de la nouvelle méthode TC-FPx sur A100 est proche ou parfois plus rapide que celle de INT4, et a une précision supérieure à celle de cette dernière. En plus de cela, il existe également une prise en charge de bout en bout des grands modèles, qui ont été open source et intégrés dans des cadres d'inférence d'apprentissage profond tels que DeepSpeed. Ce résultat a également un effet immédiat sur l'accélération des grands modèles : dans ce cadre, en utilisant une seule carte pour exécuter Llama, le débit est 2,65 fois supérieur à celui des cartes doubles. un

La semaine dernière, Microsoft a largué WizardLM-2, un modèle open source appelé niveau GPT-4. Mais je ne m’attendais pas à ce qu’il soit supprimé immédiatement quelques heures après sa publication. Certains internautes ont soudainement découvert que les poids des modèles et les annonces de WizardLM avaient tous été supprimés et ne faisaient plus partie de la collection Microsoft. Hormis la mention du site, aucune preuve n'a pu être trouvée pour prouver qu'il s'agissait d'un projet officiel de Microsoft. La page d'accueil du projet GitHub est devenue un 404. Adresse du projet : https://wizardlm.github.io/ Y compris le poids du modèle sur HF, tous ont disparu... Tout le réseau est plein de confusion, pourquoi WizardLM est-il parti ? Cependant, la raison pour laquelle Microsoft a fait cela était que l'équipe avait oublié de « tester » le modèle. Plus tard, micro

" sept péchés capitaux" » Dissiper les rumeurs : selon des informations divulguées et des documents obtenus par Vox, la haute direction d'OpenAI, y compris Altman, était bien au courant de ces dispositions de récupération de capitaux propres et les a approuvées. De plus, OpenAI est confronté à un problème grave et urgent : la sécurité de l’IA. Les récents départs de cinq employés liés à la sécurité, dont deux de ses employés les plus en vue, et la dissolution de l'équipe « Super Alignment » ont une nouvelle fois mis les enjeux de sécurité d'OpenAI sur le devant de la scène. Le magazine Fortune a rapporté qu'OpenA

Open-Sora a été discrètement mis à jour dans la communauté open source. Il prend désormais en charge la génération de vidéos jusqu'à 16 secondes, avec des résolutions allant jusqu'à 720p, et peut gérer le texte en image, le texte en vidéo, l'image en vidéo, et vidéo à vidéo de n'importe quel rapport d'aspect et aux besoins de génération de vidéos infiniment longues. Essayons-le. Générez une scène de neige de Noël sur écran horizontal, publiez-la sur le site B, puis générez un écran vertical et utilisez Douyin pour générer une vidéo de 16 secondes. Désormais, tout le monde peut vivre une vie de accro à l'écriture de scénarios. Conseils GitHub : https://github.com/hpcaitech/Open-Sora Ce qui est encore plus cool, c'est qu'Open-Sora est toujours entièrement open source, y compris la dernière architecture de modèle, les derniers poids de modèle, multi-time/resolution/long-term
