Увеличение счетчика кликов в HashMap
Я занимаюсь разработкой веб-приложения с использованием JSF 2.2. У меня есть следующий HTML-код, неупорядоченный список со статьями, со ссылками на другие страницы:
<h:form>
<div class="wrapper col3">
<div class="container">
<div class="gallery">
<ul>
<li>
<p class="imgtitle">CorelDRAW Installation Problems</p>
<a class="fb_image" href="contracts/resources/imagini/corel.jpg"><h:graphicImage library="imagini" name="corel.jpg"/></a>
<p class="readmore" ><h:link value="Continue Reading »" outcome="contracts/resources/data/imag1_corel.html" /></p>
</li>
<li>
<p class="imgtitle">Facebook down? Current problems and status</p>
<a class="fb_image" href="contracts/resources/imagini/facebook.jpg"><h:graphicImage library="imagini" name="facebook.jpg"/></a>
<p class="readmore" ><h:link value="Continue Reading »" onclick="#counter.hitCount" outcome="contracts/resources/data/imag2_facebook.html" /></p>
</li>
<li class="last">
<p class="imgtitle">Samsung Galaxy S7 review: a return to old ways</p>
<a class="fb_image" href="contracts/resources/imagini/galaxy.jpg" ><h:graphicImage library="imagini" name="galaxy.jpg"/></a>
<p class="readmore" ><h:link value="Continue Reading »" outcome="contracts/resources/data/imag3_s7.html" /></p>
</li>
<li>
<p class="imgtitle">Samsung wants you to feel VR, not just see it</p>
<a class="fb_image" href="contracts/resources/imagini/vr.jpg" title="Image 1 Link Title Tag"><h:graphicImage library="imagini" name="vr.jpg"/></a>
<p class="readmore" ><h:link value="Continue Reading »" outcome="contracts/resources/data/imag4_vr.html" /></p>
</li>
<li>
<p class="imgtitle">Instagram feed will no longer be in chronological order</p>
<a class="fb_image" href="contracts/resources/imagini/instagram.jpg" title="Image 1 Link Title Tag"><h:graphicImage library="imagini" name="instagram.jpg"/></a>
<p class="readmore" ><h:link value="Continue Reading »" outcome="contracts/resources/data/imag5_instagram.html" /></p>
</li>
<li class="last">
<p class="imgtitle">Everything we expect at Apple's event on March 21</p>
<a class="fb_image" href="contracts/resources/imagini/apple.jpg" title="Image 1 Link Title Tag"><h:graphicImage library="imagini" name="apple.jpg"/></a>
<p class="readmore" ><h:link value="Continue Reading »" outcome="contracts/resources/data/imag6_apple.html" /></p>
</li>
<li>
<p class="imgtitle">Apple's iCloud may get tighter encryption</p>
<a class="fb_image" href="contracts/resources/imagini/icloud.jpg" title="Image 1 Link Title Tag"><h:graphicImage library="imagini" name="icloud.jpg"/></a>
<p class="readmore" ><h:link value="Continue Reading »" outcome="contracts/resources/data/imag7_icloud.html" /></p>
</li>
<li>
<p class="imgtitle">Getting started with Windows 10's Messaging app</p>
<a class="fb_image" href="contracts/resources/imagini/win10skype.jpg" title="Image 1 Link Title Tag"><h:graphicImage library="imagini" name="win10skype.jpg"/></a>
<p class="readmore"><h:link value="Continue Reading »" outcome="contracts/resources/data/imag8_windows10.html" /></p>
</li>
<li class="last">
<p class="imgtitle">How PlayStation VR compares with Oculus Rift, Vive</p>
<a class="fb_image" href="contracts/resources/imagini/playstationvr.jpg" title="Image 1 Link Title Tag"><h:graphicImage library="imagini" name="playstationvr.jpg"/></a>
<p class="readmore" ><h:link value="Continue Reading »" outcome="contracts/resources/data/imag9_sonyvr.html" /></p>
</li>
</ul>
<br class="clear" />
<p id="back-to-top"><a href="#top"><span></span>Back To Top</a></p>
</div>
</div>
</div>
</h:form>
И у меня есть следующий класс ManagedBean, который мне не нужен.
@ManagedBean(name="displaymostviewed")
@SessionScoped
public class DisplayMostViewed {
private int count=0;
private static HashMap<Integer,String> map = new HashMap<Integer,String>();
private static BufferedReader reader;
public DisplayMostViewed() {
map.put(incrementCounter() , "awala");
writeToFile(map);
}
public int incrementCounter(){
count++;
return count;
}
public void writeToFile(HashMap<Integer,String> map){
try{
File fileTwo=new File("C:\\Users\\Puchu\\Documents\\NetBeansProjects\\mavenandJSF\\counter.txt");
FileOutputStream fos=new FileOutputStream(fileTwo);
PrintWriter pw=new PrintWriter(fos);
for(Map.Entry<Integer,String> m :map.entrySet()){
pw.println(m.getKey()+"="+m.getValue());
}
pw.flush();
pw.close();
fos.close();
}catch(Exception e){}
}
Что я хотел бы сделать, так это связать элементы привязки тегов из списка HTML с HashMap и увеличить счетчик на основе кликов посетителя веб-сайта по ссылке.
Я хотел бы запомнить значения счетчиков каждой ссылки, наконец отсортировать их и отобразить наиболее посещаемые ссылки на веб-странице. Как мне этого добиться?
1 ответ
Вы можете создать цикл для отображения ссылок, используя ui: repeat или dataTable, что хотите, а затем связать с методом действия для подсчета кликов (h: commandLink)... получить имя param = param с нажатой клавишей и увеличить конкретный счетчик..,
Чтобы получить ключ нажал:
FacesContext.getExternalContext().getRequestParameterMap().get("param");
например:
<ul>
<ui:repeat value="#{myBean.myMap.keySet().toArray()}" var="key">
<h:commandLink action ="#{myBean.counterMethod}">
<f:param name="param" value="#{key}" />
<li>key:#{key}</li>
<li>value:#{myBean.myMap[key]}</li>
</h:commandLink>
</ui:repeat>
</ul>
но это просто идея, надеюсь, это поможет..