Вы можете использовать метод doGet()
сервлета для предварительной обработки запроса и пересылки запроса в JSP. Затем просто укажите URL-адрес сервлета вместо URL-адреса JSP в ссылках и адресной строке браузера.
Например,
@WebServlet("/products")
public class ProductsServlet extends HttpServlet {
@EJB
private ProductService productService;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List products = productService.list();
request.setAttribute("products", products);
request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);
}
}
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
${product.name}
${product.description}
${product.price}
Обратите внимание, что файл JSP помещается внутри папки /WEB-INF
чтобы запретить пользователям напрямую обращаться к нему без вызова сервлета.
Также обратите внимание, что @WebServlet
доступен только с сервлета 3.0 (Tomcat 7 и т. д.), см. также аннотацию @WebServlet с Tomcat 7 . Если вы не можете обновить или когда вам по какой-то причине нужно использовать web.xml
, который несовместим с Servlet 3.0, вам необходимо вручную зарегистрировать сервлет старомодным способом в web.xml
, как показано ниже, вместо используя аннотацию:
productsServlet
com.example.ProductsServlet
productsServlet
/products
После правильной регистрации сервлета по аннотации или XML теперь вы можете открыть его с помощью http: // localhost: 8080 / context / products , где /context
- это путь развертывания контекста webapp, а /products
- шаблон URL сервлета. Если у вас есть какой-либо HTML внутри него, просто поставьте POST на текущий URL-адрес, например
, и добавьте
doPost()
к тому же самому сервлету для выполнения задания постобработки , Продолжите приведенные ниже ссылки для более конкретных примеров.
В соответствии со спецификацией , элемент <select>
считается read-only
, поскольку он не может быть явно отредактирован пользователем.
Псевдокласс : read-write должен соответствовать любому элементу, попадающему в одну из следующих категорий, которые, таким образом, для целей селекторов считаются изменяемыми пользователем: [SELECTORS]
]
- входные элементы, к которым применяется атрибут readonly, и которые являются изменяемыми (т. Е. Для которых не указан атрибут readonly и которые не отключены)
- [1120 ] элементы textarea , которые не имеют атрибута «только для чтения» и которые не отключены
- элементы , которые редактируют хосты или редактируются и не являются ни элементами ввода, ни элементами textarea
[ 1123]Псевдокласс : только для чтения должен соответствовать всем другим элементам HTML.
blockquote>Вместо этого следует использовать атрибут
disabled
, чтобы указать, что пользователь не может взаимодействовать с элементом<select>
. С атрибутомdisabled
вам не нужно указывать дополнительный CSS, чтобы отключить взаимодействие мыши с элементом.Вот как это будет работать:
<p> ACCEPTED </p> <select disabled> <option>1</option> <option>2</option> <option>3</option> </select> <br> <p> UNACCEPTED : selector also applying here </p> <select> <option>1</option> <option>2</option> <option>3</option> </select>
Вам необходимо назначить уникальный идентификатор, такой как class
или id
, чтобы конкретно сделать первый тег выбора readonly
, а не оба ... например, здесь я использую тег и селектор атрибута для выбора теги с атрибутом readonly
select[readonly]:-moz-read-only {
/* For Firefox */
pointer-events: none;
}
select[readonly]:read-only {
pointer-events: none;
}
<p> ACCEPTED </p>
<select readonly>
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<br>
<p> UNACCEPTED : selector also applying here </p>
<select>
<option>1</option>
<option>2</option>
<option>3</option>
</select>
Используемый вами селектор является селектором тегов и будет выбирать любой тег select
и включите его только для чтения.
Добавление некоторых деталей на основе комментариев,
Вы можете отключить фокус вкладки, используя атрибут tabindex
со значением, установленным в false
в теге select