繁体   English   中英

在XHTML页面打开时调用ManagedBean方法

[英]ManagedBean method called on XHTML page opening

我正在使用Eclise Juno,Tomcat 7和JSF进行开发。

当我在服务器上运行项目时,似乎已经运行Client.fct1()方法。 这是在我的XHTML InputText中设置值。

启动后,我希望只能看到从Bean构造函数方法中设置的值。

这是我的XHTML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<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">

<ui:composition template="./template.xhtml">
    <ui:param name="onLoadJS" value="initialize()" />
    <ui:define name="top">
        Frontend
        <script type="text/javascript"
                src="#{utils.GMapURL}">
        </script>
        <script type="text/javascript">
            var map;

            function initialize() {
                var x = 500;
                document.getElementById("bottom").style.height = x+'px'; 
                var mapOptions = {
                    center: new google.maps.LatLng(48.84325, 2.237803),
                    zoom: 14,
                    mapTypeId: google.maps.MapTypeId.HYBRID
                };
                map = new google.maps.Map(document.getElementById("bottom"),
                mapOptions);
                google.maps.event.addListener(map, 'click', function(event) {
                                                                addPlacemark(event.latLng.lat(),event.latLng.lng());
                                                            });
            }

            function add(vlat,vlon,vname) {
                ...
            }

            function addPlacemark(vlat,vlon) {
                ...
            }

            function lookAt(vlat,vlon) {
                ...
            }

            function resetBean() {
                alert("ResetBean!");
                #{client.fct1()};
            }

        </script>

        <A HREF="faces/map.xhtml">Placemark</A> <A HREF="faces/directions.xhtml">Directions</A> 
    </ui:define>

    <ui:define name="body">
        <h4>Latitude  : <h:inputText id="lat" value="#{client.lat}"/></h4>
        <h4>Longitude : <h:inputText id="lon" value="#{client.lon}"/></h4>
        <h4>Name      : <h:inputText id="name" value="#{client.name}"/></h4>
    <h:commandButton onclick="add(document.getElementById('lat').value,document.getElementById('lon').value,document.getElementById('name').value)" value="Add"/>
    <h:commandButton onclick="lookAt(document.getElementById('lat').value,document.getElementById('lon').value)" value="Look At"/>
    <h:commandButton onclick="displayAll()" value="Display All"/>
    <h:commandButton onclick="resetBean()" value="Reset Form (bean)"/>
    </ui:define>

    <ui:define name="bottom">
    </ui:define>
</ui:composition>
</html>

还有我的豆子:

package web;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 * Session Bean implementation class Client
 */
@ManagedBean
@SessionScoped
public class Client implements Serializable {

private static final long serialVersionUID = 1L;

private String lat;
private String lon;
private String name;

// Constructor
public Client() {
    this.lat = "11.2051195";
    this.lon = "119.4056492";
    this.name = "[Put name here]";
}

public void fct1(){
    this.lat = "Damn";
    this.lon = "It";
    this.name = "..";
}

public String getLat() {
    return lat;
}

public void setLat(String lat) {
    this.lat = lat;
}

public String getLon() {
    return lon;
}

public void setLon(String lon) {
    this.lon = lon;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}

因此,我得到的是“该死的……”,而不是默认的“ 11.2051195 119.4056492 [在此处输入名称]”。

如何调用fct1()方法? 我该如何预防?

谢谢你的帮助!

你似乎认为

        function resetBean() {
            alert("ResetBean!");
            #{client.fct1()};
        }

#{client.fct1()}; 在调用javascript函数resetBean()调用。 它不是。 由于页面不在任何jsf标记中,因此在呈现页面时执行(因此没有onload)。 如果要从javascript调用远程方法,最容易使用的是OmniFaces commandScript (无论如何,在项目中使用omnifaces都是个好主意)

您的代码将如下所示

        function resetBean() {
            alert("ResetBean!");
            callFct1();
        }

然后在您的xhtml中添加

<o:commandScript name="callFct1" action="#{client.fct1()}">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM