2011-07-15 45 views
7

Tôi đang tạo trang web có thể truy cập được qua thiết bị di động và máy tính để bàn. Vì vậy, tôi muốn tạo 2 lượt xem ứng dụng của mình. Mã hành động của tôi và mọi thứ khác trong chương trình phụ trợ (quản lý, DAO) đều giống nhau. Chỉ cần thay đổi JSP cho cả hai.Struts2 cách tạo nhiều chế độ xem cho thiết bị di động và máy tính để bàn

Làm cách nào tôi có thể thực hiện điều này thông qua Struts 2?

Trả lời

1

không chắc chắn liệu có thư viện cho việc tự động hóa nhiệm vụ như vậy cho thanh chống 2. nhưng nếu có, sử dụng thư viện như vậy có thể được tốt hơn

dù sao, đây là lý thuyết. mọi trình duyệt đều có "chữ ký" của riêng nó được viết trong tiêu đề yêu cầu, được gọi là "Tác nhân người dùng". trình duyệt khác nhau (được cho là) ​​có tác nhân người dùng khác nhau. ví dụ: tác nhân người dùng firefox của tôi như sau: Mozilla/5.0 (Windows NT 6.0; rv: 5.0) Gecko/20100101 Firefox/5.0 FirePHP/0.5

về cơ bản, bằng cách phát hiện tác nhân người dùng, bạn có thể biết trình duyệt nào được sử dụng để truy cập trang web của bạn. danh sách các tác nhân người dùng trình duyệt trên thiết bị di động có thể được tìm thấy trong http://www.zytrax.com/tech/web/mobile_ids.html

nếu tôi không sai, bạn có thể truy xuất tác nhân người dùng trong máy chủ bằng httpServletRequest.getHeader ("User-Agent"); (sửa tôi nếu tôi sai)

sau đó bạn có thể tạo trình chặn đánh chặn sẽ quyết định xem khách hàng là từ thiết bị di động hay từ máy tính để bàn. mà interceptor có thể trả về kết quả khác nhau cho các loại máy khách khác nhau. ví dụ: nếu máy khách là máy tính để bàn, bạn có thể trả về "successDesktop" và nếu ứng dụng khách là thiết bị di động, bạn có thể trả về "successMobile".

tốt, hy vọng ai đó có thể đưa ra (đến nay) giải pháp dễ dàng hơn

3

Trong thanh chống có rất nhiều cách để có được những điều tương tự. Trong trường hợp này, cái tôi thích là: Bạn có thể viết interceptor để thay đổi mã trả về dựa trên tác nhân người dùng là khách hàng, như vậy sẽ có phiên bản cho PC và thiết bị di động của mỗi jsp. Trong cấu hình của bạn, bạn cần có tất cả các mã kết quả cho tất cả jsp (hoặc bạn có thể chỉ định nghĩa kết quả thông qua ánh xạ ký tự đại diện). Ví dụ: thay đổi mã kết quả từ "thành công" thành "mobile_success". Trong trường hợp bạn muốn ánh xạ cả hai kết quả trong cùng một jsp bạn có thể lập bản đồ, như tôi đã nói trước đây, theo cách này <result name="*success">

0

Tôi hiện đang cố gắng giải quyết vấn đề này. Một khuôn khổ sẽ là tốt đẹp, và tôi là tất cả các tai nếu có ai đã thử nghiệm và phê duyệt một. Điều đó nói rằng, tôi không thể tìm thấy bất cứ điều gì đủ trưởng thành để tôi có thể biện minh cho việc chuyển từ Struts sang chế độ xem di động.

Giải pháp tốt nhất của tôi hiện tại là tạo hành động cho từng phần trong toàn bộ trang của tôi sẽ được hiển thị trên trình duyệt hoàn chỉnh. Sau đó, sử dụng lại những hành động đó để hiển thị phân đoạn trang ở phía bên thiết bị di động.

Tôi thấy cố gắng làm cho một trang trông phù hợp với trình duyệt trên máy tính để bàn và trình duyệt di động đồng thời không phải là một cách tiếp cận bền vững.

Điện thoại di động jQuery trông giống như một thư viện rất hứa hẹn để tạo kiểu cho các thành phần được truy xuất bởi thanh chống. Vì vậy, trong khi chắc chắn có thể nhồi nhét cả hai phiên bản của trang web vào một hành động, tôi nghĩ rằng dành thời gian để tạo các hành động có thể tái sử dụng nhỏ dẫn đến các đoạn mã jsp sẽ trả hết khi quy mô ứng dụng của bạn.

Dưới đây là một số khả năng trong tương lai gần:

(Tôi không thể thêm các liên kết như là tôi không có đủ uy tín ... bạn sẽ phải thêm 'http: // www . ')

struts2 dự án jQuery Mobile trang chủ: http://code.google.com/p/struts2-jquery/

struts2 jQuery Mobile dự án: code.google.com/p/struts2-jquery/downloads/detail?name=struts2-jquery-mobile-showcase-3.1 .1.war

ví dụ về struts2 jQuery Mobile: weinfreund .de/struts2-jquery-mobile-showcase/index.action

@fajrian - sử dụng 'tác nhân người dùng' để xác định loại trình duyệt có thể trở thành nỗi đau thực sự khi ngày càng nhiều trình duyệt trên thiết bị di động và máy tính để bàn được phát hành. Cách tiếp cận tốt hơn là xác định xem có hiển thị phiên bản di động hoặc phiên bản đầy đủ dựa trên kích thước của cửa sổ hay không. A perfect example.

chỉnh sửa - Xem truy vấn phương tiện CSS3.

0

Điều này làm việc cho tôi và về cơ bản nên giải quyết vấn đề. Bạn cần phải biết ít nhất một phần của chuỗi tác nhân người dùng mặc dù:

public class MobileInterceptor extends AbstractInterceptor { 

private static final String RESULT_CODE_SUFFIX_MOBILE = "mobile"; 
private static final String REQUEST_HEADER_ACCEPT = "Accept"; 
private static final String[] MOBILE_BROWSER_UAS = {"iPhone OS","Android","BlackBerry","Windows Phone"}; 

public String intercept(ActionInvocation invocation) throws Exception { 

    invocation.addPreResultListener(new PreResultListener() { 
     public void beforeResult(ActionInvocation invocation, String resultCode) { 

      // check if a wireless version of the page exists 
      // by looking for a wireless action mapping in the struts.xml 
      Map results = invocation.getProxy().getConfig().getResults(); 
      System.out.println("Results:"+results.toString()); 
      if(!results.containsKey(resultCode + RESULT_CODE_SUFFIX_MOBILE)) { 

       return; 
      } 

      // send to mobile version if mobile browser is used 
      final String acceptHeader = ServletActionContext.getRequest().getHeader(REQUEST_HEADER_ACCEPT); 

      //Get User Agent String 
      String userAgent = ServletActionContext.getRequest().getHeader("User-Agent"); 
      System.out.println("UA: "+userAgent); 

      //Boolean to indicate whether to show mobile version 
      boolean showMobileVersion = false; 

      //Run through each entry in the list of browsers 
      for(String ua : MOBILE_BROWSER_UAS){ 
       if(userAgent.toLowerCase().matches(".*"+ua.toLowerCase()+".*")){ 
        showMobileVersion = true; 
       } 
      } 

      if(showMobileVersion) { 
       invocation.setResultCode(resultCode + RESULT_CODE_SUFFIX_MOBILE); 
      } 
     } 
    }); 

    return invocation.invoke(); 
} 
Các vấn đề liên quan