anishcana / jovial

SpringAjaxModule
0 stars 0 forks source link

Searching a json page #2

Closed anishcana closed 4 months ago

anishcana commented 4 months ago

@Controller public class SearchController {

private final ObjectMapper objectMapper = new ObjectMapper();
private final List<DataObject> dataList;

public SearchController() throws IOException {
    InputStream inputStream = getClass().getResourceAsStream("/data.json");
    dataList = objectMapper.readValue(inputStream, new TypeReference<List<DataObject>>() {});
}

@GetMapping("/")
public String home(Model model) {
    model.addAttribute("dataList", dataList);
    return "index";
}

@PostMapping("/search")
@ResponseBody
public List<DataObject> search(@RequestParam String query) {
    List<DataObject> searchResults = new ArrayList<>();
    for (DataObject data : dataList) {
        if (data.getName().toLowerCase().contains(query.toLowerCase())) {
            searchResults.add(data);
        }
    }
    return searchResults;
}

}

4.  DataObject Class:
•   Create a POJO class to represent the structure of the JSON data.

public class DataObject { private String name; // Add other fields as needed // Include getters and setters }

5.  index.jsp:
•   Create a JSP page (index.jsp) in the src/main/resources/templates directory to display search results.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html>

Search Page

Search Results

6.  application.properties:
•   Configure the view resolver in application.properties.

spring.mvc.view.prefix=/templates/ spring.mvc.view.suffix=.jsp

anishcana commented 4 months ago

Import statement for controller

import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List;

anishcana commented 4 months ago

[ {"name": "John"}, {"name": "Alice"}, {"name": "Bob"}, {"name": "Emma"}, {"name": "Michael"} ]

anishcana commented 4 months ago

<!DOCTYPE html>

Search Page

Search Page




anishcana commented 4 months ago

import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import java.io.IOException; import java.io.InputStream; import java.util.List; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.core.io.ClassPathResource;

@Controller public class DataController {

@GetMapping("/performSearch")
@ResponseBody
public List<SearchResult> performSearch(@RequestParam("query") String query) throws IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    InputStream inputStream = new ClassPathResource("data.json").getInputStream();
    List<SearchResult> results = objectMapper.readValue(inputStream, new TypeReference<List<SearchResult>>() {});

    // Perform filtering based on the query
    // This is just a dummy implementation
    return filterResults(results, query);
}

private List<SearchResult> filterResults(List<SearchResult> results, String query) {
    // Implement your filtering logic here
    // For example, filter results based on title containing the query
    // This is just a dummy implementation
    return results.stream()
            .filter(result -> result.getTitle().toLowerCase().contains(query.toLowerCase()))
            .toList();
}

}

anishcana commented 4 months ago

import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import java.io.IOException; import java.io.InputStream; import java.util.List; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.core.io.ClassPathResource;

@Controller public class DataController {

@GetMapping("/performSearch")
@ResponseBody
public List<SearchResult> performSearch(@RequestParam("query") String query) throws IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    InputStream inputStream = new ClassPathResource("data.json").getInputStream();
    List<SearchResult> results = objectMapper.readValue(inputStream, new TypeReference<List<SearchResult>>() {});

    // Perform filtering based on the query
    // This is just a dummy implementation
    return filterResults(results, query);
}

private List<SearchResult> filterResults(List<SearchResult> results, String query) {
    // Implement your filtering logic here
    // For example, filter results based on title containing the query
    // This is just a dummy implementation
    return results.stream()
            .filter(result -> result.getTitle().toLowerCase().contains(query.toLowerCase()))
            .toList();
}

// Inner class representing the structure of search results
public static class SearchResult {
    private String title;

    // Constructor, getters, and setters
    public SearchResult(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

}

<!DOCTYPE html>

Search Page

Search Page

anishcana commented 4 months ago

<!DOCTYPE html>

Search Page

Search Page

anishcana commented 4 months ago

<!DOCTYPE html>

Search Page

Search Page

anishcana commented 4 months ago

Input field added

<!DOCTYPE html>

Search Page

Search Page

anishcana commented 4 months ago

<!DOCTYPE html>

Search Page

Search Page

anishcana commented 4 months ago
1.  Controller class:

import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths;

@Controller public class JsonController {

@GetMapping("/")
public String index() {
    return "index";
}

@GetMapping("/getData")
@ResponseBody
public String getData() {
    try {
        // Read JSON file and return its content
        return new String(Files.readAllBytes(Paths.get("data.json")));
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

}

2.  HTML file (index.html) with AJAX:

<!DOCTYPE html>

JSON Search Example

JSON Search



3.  JSON file (data.json) with sample data:

{ "name": "John Doe", "age": 30, "email": "john.doe@example.com", "city": "New York", "country": "USA" }

anishcana commented 4 months ago

JSON Search



anishcana commented 4 months ago

AJAX:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html>

Search Example

Search Example

anishcana commented 4 months ago

AJAX:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html>

Search Example

Search Example

anishcana commented 4 months ago

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html>

Search Example
anishcana commented 4 months ago

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html>

Search Example
anishcana commented 4 months ago

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html>

Search Example

Search Example

anishcana commented 4 months ago

<!DOCTYPE html>

Search Example

Search Example

anishcana commented 4 months ago

<!DOCTYPE html>

Data Display

Data Display

anishcana commented 4 months ago

<!DOCTYPE html>

Data Display

Data Display

anishcana commented 4 months ago

<!DOCTYPE html>

Data Display

Data Display

anishcana commented 4 months ago

<!DOCTYPE html>

Data Display
anishcana commented 4 months ago

Validation

<!DOCTYPE html>

Data Display

Data Display

anishcana commented 4 months ago

Json format

<!DOCTYPE html>

Data Display
anishcana commented 4 months ago

<!DOCTYPE html>

Data Display

Data Display

anishcana commented 4 months ago

<!DOCTYPE html>

Data Display

Data Display

anishcana commented 4 months ago

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% // Sample content String content = "This is a sample text to demonstrate search highlighting in JSP.";

// Get the search keyword from the request
String searchText = request.getParameter("searchText");

// Highlight the search keyword in the content
if (searchText != null && !searchText.isEmpty()) {
    content = content.replaceAll("(?i)(" + searchText + ")", "<span style='background-color: yellow;'>$1</span>");
}

// Send back the updated content
out.print(content);

%>

anishcana commented 4 months ago

// Highlight the search keyword in the content if (searchText != null && !searchText.isEmpty()) { content = content.replaceAll("(?i)(" + searchText + ")", "$1"); }