2015-10-11 3 views
0

У меня есть файл jsp с некоторыми XML-данными, внутри которых содержится ссылка на таблицу стилей xslt. У меня есть несколько классов, пользователей, пользователей, testJAXB и DiaryApplication.Как мне вызвать методы в jsp-файле из javabean?

Мой вопрос, как я называю метод пользователя или класс, который позволит мне вместо того, чтобы печатать из строк между XML-тегами, как [email protected] я хочу, чтобы иметь возможность сделать что-то вроде этого

<% user.getEmail(); %> означает, что я могу использовать scriplets для вызова данных вместо ввода. Как мне это сделать.

////////////// Ниже представлен мой JSP-файл.

<%@page contentType="Application/xml"%><?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="main.xsl"?> 
<% String filePath = application.getRealPath("WEB-INF/users.xml"); %> 
<jsp:useBean id="diaryApp" class="anypackage.DiaryApplication" scope="application"> 
    <jsp:setProperty name="diaryApp" property="filePath" value="<%=filePath%>"/> 
</jsp:useBean> 

<% ??? ???? ???%> 
<users> 
    <user> 
     <email>user</email> 
     <username>average user</username> 
     <password>blahblah</password> 
    </user> 
    <user> 
     <email>[email protected]</email> 
     <username>Joe Bloggs</username> 
     <password>foobar</password> 
    </user> 
    <user> 
     <email>[email protected]</email> 
     <username>joe average</username> 
     <password>password</password> 
    </user> 
     <user> 
     <email>[email protected]</email> 
     <username>user</username> 
     <password>password</password> 
    </user> 
</users> 

/////// Ниже пользователей и пользователей двух классов

package anypackage; 

import java.util.*; 
import java.io.Serializable; 
import javax.xml.bind.annotation.*; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement(name = "users") 
public class Users implements Serializable { 
    // The list of user elements does NOT have an extra wrapper element. 
    // See the comment in the XML file, and compare to the bookshop example. 
    @XmlElement(name = "user") 
    private ArrayList<User> list = new ArrayList<User>(); 

    public ArrayList<User> getList() { 
     return list; 
    } 
    public void addUser(User user) { 
     list.add(user); 
    } 
    public void removeUser(User user) { 
     list.remove(user); 
    } 
    public User login(String email, String password) { 
     // For each user in the list... 
     for (User user : list) { 
      if (user.getEmail().equals(email) && user.getPassword().equals(password)) 
       return user; // Login correct. Return this user. 
     } 
     return null; // Login incorrect. Return null. 
    } 
} 


package anypackage; 

import java.io.Serializable; 
import java.util.*; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 


@XmlAccessorType(XmlAccessType.FIELD) 
public class User implements Serializable{ 
    @XmlElement(name = "email") 
    private String email; 
    @XmlElement(name = "username") 
    private String username; 
    @XmlElement(name = "password") 
    private String password; 

public User() { 
    super(); 
    // TODO Auto-generated constructor stub 
} 
public User(String email, String username, String password) { 
    this.email = email; 
    this.username = username; 
    this.password = password; 
} 
public String getEmail() { 
    return email; 
} 
public void setName(String email) { 
    this.email = email; 
} 

public String getUsername() { 
    return username; 
} 
public void setUsername(String username) { 
    this.username = username; 
} 
public String getPassword() { 
    return password; 
} 
public void setPassword(String password) { 
    this.password = password; 
} 

} 

////// Ниже мой класс DiaryApplication

package anypackage; 

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Marshaller; 
import javax.xml.bind.Unmarshaller; 
import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
@XmlAccessorType(XmlAccessType.PROPERTY) 
public class DiaryApplication { 
private String filePath; 
private Users users; 

public DiaryApplication(String filePath, Users users) { 
    super(); 
    this.filePath = filePath; 
    this.users = users; 
} 
public DiaryApplication() { 
    super(); 
    // TODO Auto-generated constructor stub 
} 
@XmlElement 
public String getFilePath() { 
    return filePath; 
} 
@XmlElement 
public void setFilePath(String filePath) throws JAXBException, IOException { 
    this.filePath = filePath; 
    // This is the file path given to us. 
    // We should use it 

    // Load the users from the XML file... 
    JAXBContext jc = JAXBContext.newInstance(Users.class); 
    Unmarshaller u = jc.createUnmarshaller(); 
    FileInputStream fin = new FileInputStream(filePath); // use the given file path 
    users = (Users)u.unmarshal(fin); // This loads the "users" object 
    fin.close(); 
} 
@XmlElement 
public Users getUsers() { 
    return users; 
} 
public void setUsers(Users users) { 
    this.users = users; 
} 
@XmlElement 
public void saveUsers() throws JAXBException, IOException { 
    JAXBContext jc = JAXBContext.newInstance(Users.class); 
    Marshaller m = jc.createMarshaller(); 
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    FileOutputStream fout = new FileOutputStream(filePath); 
    m.marshal(users, fout); 
    fout.close(); 
} 
} 

//// ///////////// Ниже мой класс TestJAXB

package anypackage; 

import java.util.*; 
import java.io.*; 
import javax.xml.bind.*; 

public class TestJAXB implements Serializable { 
public static void main(String[] args) throws Exception { 
    Users users = new Users(); 
    users.addUser(new User("[email protected]", "tervor", "blahblah", "male", "green")); 
    users.addUser(new User("[email protected]", "Joe Bloggs", "foobar", "male", "yellow")); 
    // Boilerplate code to convert objects to XML... 
    JAXBContext jc = JAXBContext.newInstance(Users.class); 
    Marshaller m = jc.createMarshaller(); 
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    m.marshal(users, System.out); 
} 
} 

ответ

0

В квартире l-designed MVC-приложение, JSP не должен вызывать бизнес-логику (классы Java), но должен просто получать значения для отображения. Другими словами, он должен знать только логику, необходимую для представления полученных данных.

Кстати, если вы хотите действовать таким образом, вы можете это сделать.

Чтобы использовать метод Java в файле JSP вы должны:

  • импортировать класс объявление в начале файла, например <%@ page import="full.package.path.ClassName" %>
  • , то вы можете напрямую использовать свой статический метод в своем скриптлете, например. <% ClassName.staticMethod(params...) %>
  • Если вам нужен не статический, вам нужно построить экземпляр, а затем использовать метод, например. <% ClassName c = new ClassName(); c.staticMethod(params...) %>

Надеется, что это помогает

+0

Нет оно не, вы на самом деле не могли делать то, что я просил, даже когда я показал весь код ....... –