मैं इसके लिए बहुत नया हूं, इसलिए कृपया दयालु बनें। मेरे पास मेरे डेटाबेस में एक टेबल 'उपयोगकर्ता' है और प्रत्येक उपयोगकर्ता एक टीम का हिस्सा है। मैं जो करने की कोशिश कर रहा था वह सभी उपयोगकर्ताओं को उनकी टीम के नाम के आधार पर अलग-अलग तालिकाओं में प्रदर्शित करना है। यह मेरी उपयोगकर्ता सेवा में कोड है:

    public List<User> getUsersFromFirstTeam() {
    List<User> usersFromFirstTeam = userRepository.findByTeam(FIRST_TEAM);
    return usersFromFirstTeam;
}

public List<User> getUsersFromSecondTeam() {
    List<User> usersFromSecondTeam = userRepository.findByTeam(SECOND_TEAM);
    return usersFromSecondTeam;
}

यह मेरे उपयोगकर्ता नियंत्रक में कोड है:

@Autowired
private UserService userService;

@GetMapping(value = "/admin/usermanagement")
public ModelAndView userManagement(Model firstTeamModel, Model secondTeamModel) {
    ModelAndView modelAndView = new ModelAndView();
    firstTeamModel.addAttribute("firstTeamUsers", userService.getUsersFromFirstTeam());
    secondTeamModel.addAttribute("secondTeamUsers", userService.getUsersFromSecondTeam());
    modelAndView.setViewName("userManagement");
    return modelAndView;
}

और अंत में यह मेरा .jsp पृष्ठ है जो प्रदर्शित होता है:

<body>
<div class = "tab" style="width: 250px">
<button class ="tablinks" onclick = "openTable(event, 'FirstTeam')">First 
Team</button>
<button class ="tablinks" onclick = "openTable(event, 'SecondTeam')">Second
Team</button>
</div>
<div id="FirstTeam" class="tabcontent">
<h3>First team members</h3>
<table class="table">
      <thead>
        <tr>
          <th>Username</th>
          <th>Firstname</th>
          <th>Lastname</th>
          <th>Email</th>

        </tr>
      </thead>
      <tbody>
              <c:forEach  items="${firstTeamUsers}" var ="user">
              <tr>
                <td>${user.username}</td>
                <td>${user.firstName}</td>
                <td>${user.lastName}</td>
                <td>${user.email}</td>
              </tr>
              </c:forEach>
      </tbody>
    </table>
</div>

<div id="SecondTeam" class="tabcontent">
<h3>Secondteam members</h3>
<table class="table">
        <thead>
          <tr>
            <th>Username</th>
            <th>Firstname</th>
            <th>Lastname</th>
            <th>Email</th>

          </tr>
        </thead>
        <tbody>
                <c:forEach  items="${secondTeamUsers}" var ="user">
                <tr>
                  <td>${user.username}</td>
                  <td>${user.firstName}</td>
                  <td>${user.lastName}</td>
                  <td>${user.email}</td>
                </tr>
                </c:forEach>
        </tbody>
      </table>
</div>

</body>

तो, यह कोड काम करता है और वही करता है जो मैं चाहता हूं। यह दो टैब 'पहली टीम' और 'दूसरी टीम' बनाता है और जब मैं प्रत्येक टैब पर क्लिक करता हूं तो यह टीम के नाम से क्रमबद्ध उपयोगकर्ताओं के साथ तालिका प्रदर्शित करता है। मेरी समस्या यह है कि मैं इस पूरी चीज को टीम के नाम को हार्डकोड किए बिना और डायनेमिक रूप से डिव उत्पन्न करके करना चाहता हूं ताकि इससे कोई फर्क नहीं पड़ता कि भविष्य में कितनी टीमें होंगी या उनके नाम क्या हैं। मैं इसे कैसे प्राप्त कर सकता हूं इस पर कोई विचार? आपके समय और मदद के लिए अग्रिम धन्यवाद!

1
Ioana 12 नवम्बर 2018, 17:46

1 उत्तर

सबसे बढ़िया उत्तर

अपने नियंत्रक में एक मानचित्र बनाएं और उसे मॉडल में जोड़ें:

@GetMapping(value = "/admin/usermanagement")
public ModelAndView userManagement() {
    ModelAndView modelAndView = new ModelAndView();

    Map<String, List<User>> usersMap = new LinkedHashMap<>();
    usersMap.put("First Team", userService.getUsersForTeam(FIRST_TEAM));
    usersMap.put("Second Team", userService.getUsersForTeam(SECOND_TEAM));
    modelAndView.add("usersMap", usersMap)

    modelAndView.setViewName("userManagement");

   return modelAndView;
}

जेएसपी में आप मानचित्र प्रविष्टियों को पुन: सक्रिय कर सकते हैं, जैसे कुछ:

<c:forEach items="${usersMap}" var="entry">
    <div id="${entry.key}" class="tabcontent">
    <h3>${entry.key} Members</h3>
    <table class="table">
          <thead>
            <tr>
              <th>Username</th>
              <th>Firstname</th>
              <th>Lastname</th>
              <th>Email</th>

            </tr>
          </thead>
          <tbody>
              <c:forEach items="${entry.value}" var ="user">
                  <tr>
                    <td>${user.username}</td>
                    <td>${user.firstName}</td>
                    <td>${user.lastName}</td>
                    <td>${user.email}</td>
                  </tr>
              </c:forEach>
          </tbody>
        </table>
    </div>
</c:forEach>

आपको अभी भी प्रत्येक नए प्रकार के लिए नियंत्रक कोड बदलने की आवश्यकता होगी ताकि आप गतिशील रूप से टीमों की सूची लाकर इसे साफ़ कर सकें ताकि यह नीचे जैसा कुछ दिखाई दे। डेटाबेस में कोई भी नई टीम फिर बिना किसी कोड परिवर्तन के दृश्य में स्वचालित रूप से दिखाई देनी चाहिए।

ModelAndView modelAndView = new ModelAndView();

Map<String, List<User>> usersMap = new LinkedHashMap<>();
List<String> teamNames = //db lookup on distinct team names

for(String name : teamNames){
    usersMap.put(name, userService.getUsersForTeam(name));
}

modelAndView.add("usersMap", usersMap);
0
Alan Hay 12 नवम्बर 2018, 15:37